Разное
Последние книги
Самое популярное
Все бесплатно
Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.
Навигация
Вопросы
Компоненты ToolBar и PageScroller
Категория: Компоненты
Категория: Компоненты
Распознавание кодировки. Перекодировка.
Категория: Текст и строки
Категория: Текст и строки
Показать удаленные записи в DBase
Категория: Базы данных
Категория: Базы данных
Упаковка таблиц в BDE
Категория: Базы данных
Категория: Базы данных
Узнать запущен ли сервис FireBird
Категория: Интернет и Сети
Категория: Интернет и Сети
Перекодировка в DBASE
Категория: Базы данных
Категория: Базы данных
Узнать все IP-адреса компьютера
Категория: Интернет и Сети
Категория: Интернет и Сети
Что такое хук (hook)?
Категория: Приложение
Категория: Приложение
Форма всегда наверху
Категория: Компоненты
Категория: Компоненты
Получить имена всех папок и файлов в директории
Категория: Файловая система
Категория: Файловая система
Delphi - База Знаний: Добавить данные в EXE файл и получить их
function attachtofile(const afilename: string; memorystream: tmemorystream): boolean;
var
astream: tfilestream;
isize: integer;
begin
result := false;
if not fileexists(afilename) then
exit;
try
astream := tfilestream.create(afilename, fmopenwrite or fmsharedenywrite);
memorystream.seek(0, sofrombeginning);
// seek to end of file
// ans ende der datei seeken
astream.seek(0, sofromend);
// copy data from memorystream
// daten vom memorystream kopieren
astream.copyfrom(memorystream, 0);
// save stream-size
// die streamgro?e speichern
isize := memorystream.size + sizeof(integer);
astream.write(isize, sizeof(isize));
finally
astream.free;
end;
result := true;
end;
function loadfromfile(const afilename: string; memorystream: tmemorystream): boolean;
var
astream: tfilestream;
isize: integer;
begin
result := false;
if not fileexists(afilename) then
exit;
try
astream := tfilestream.create(afilename, fmopenread or fmsharedenywrite);
// seek to position where stream-size is saved
// zur position seeken wo streamgro?e gespeichert
astream.seek(-sizeof(integer), sofromend);
astream.read(isize, sizeof(isize));
if isize > astream.size then
begin
astream.free;
exit;
end;
// seek to position where data is saved
// zur position seeken an der die daten abgelegt sind
astream.seek(-isize, sofromend);
memorystream.setsize(isize - sizeof(integer));
memorystream.copyfrom(astream, isize - sizeof(isize));
memorystream.seek(0, sofrombeginning);
finally
astream.free;
end;
result := true;
end;
procedure tform1.saveclick(sender: tobject);
var
astream: tmemorystream;
begin
astream := tmemorystream.create;
memo1.lines.savetostream(astream);
attachtofile('test.exe', astream);
astream.free;
end;
procedure tform1.loadclick(sender: tobject);
var
astream: tmemorystream;
begin
astream := tmemorystream.create;
loadfromfile('test.exe', astream);
memo1.lines.loadfromstream(astream);
astream.free;
end;
{
note:
you can't proof whether additional data is attached or not.
to reach this, you would have to create a checksumm of the
memorystream and attach it.
}