Разное
Последние книги
Самое популярное
Все бесплатно
Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.
Навигация
Вопросы
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.
}