Когда необходимо "запихать" в EXE создаваемой программы какого-либо файла а потом его извлеч можно воспользоваться данной функцией. Очень удобно и просто.
Процедура из указанного файла (FileName) создаёт unit в котором объявлен, заполненный побайтово, массив и процедура сохранения этого массива обратно в файл. Таким образом можно включить в один EXE-шник множество других файлов (dll, ocx, dbf и т.п.) - прикрепить их как unit-ы. Фактически, после сжатия EXE-шника программами типа UPX, получаем довольно компактный файл, который можно использовать в качестве дистрибутива, например.
Зависимости: SysUtils, System
procedure FileToPas(FileName: string);
var
BF: file of Byte;
F: TextFile;
P, N, S: string;
BFSize: integer;
BBB: Byte;
begin
AssignFile(BF, FileName);
Reset(BF);
BFSize := FileSize(BF);
P := ExtractFilePath(FileName);
N := ExtractFileName(FileName);
N := ChangeFileExt(N,'.PAS'
);
AssignFile(F, N);
ReWrite(F);
Writeln(F,'(* Generated by Master BRAIN (C) 2002 *)'
);
Writeln(F,'unit '
+ ChangeFileExt(N,''
) +';'
);
Writeln(F);
Writeln(F,'interface'
);
Writeln(F);
Writeln(F,'const FileSize:integer='
+ IntToStr(BFSize) +';'
);
Writeln(F,'FileData:array[0..'
+ IntToStr(BFSize - 1) +'] of Byte='
);
Writeln(F,'('
);
while not Eof(BF) do
begin
S :=''
;
while (not Eof(BF)) and (Length(S) < 80) do
begin
Read(BF, BBB);
S := S + IntToStr(BBB) +','
;
end;
if Eof(BF) then
Delete(S, Length(S), 1);
Writeln(F, S);
end;
CloseFile(BF);
Writeln(F,');'
);
Writeln(F);
Writeln(F,'procedure SaveToFile(FileName:String);'
);
Writeln(F);
Writeln(F,'implementation'
);
Writeln(F);
Writeln(F,'procedure SaveToFile(FileName:String);'
);
Writeln(F,'var F:File of Byte;'
);
Writeln(F,' i:integer;'
);
Writeln(F,'begin'
);
Writeln(F,'AssignFile(F,FileName);'
);
Writeln(F,'ReWrite(F);'
);
Writeln(F,'for i:=0 to FileSize-1 do Write(F,FileData[i]);'
);
Writeln(F,'CloseFile(F);'
);
Writeln(F,'end;'
);
Writeln(F);
Writeln(F,'end.'
);
CloseFile(F);
end;
Copyright: Delirium (Master BRAIN)
Просмотров: 4949
Copyright © 2008 - 2018 Программирование на Delphi для начинающих и не только.
Полнота авторских прав на все материалы, опубликованные на сервере DelphiDevelop.ru принадлежит их авторам.
Перепечатка материалов разрешается с указанием авторства и гиперссылки на первоисточник информации.