Все бесплатно
    Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.



Вопросы
  Компоненты 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.
}
  << Вернуться к Содержанию