Соединяем ЕХЕ файлы
function AttachToFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean; var aStream:TFileStream; iSize:Integer; begin Result:=False; if not FileExists('proga.exe') then Exit; try aStream:=TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite); MemoryStream.Seek(0, soFromBeginning); aStream.Seek(0, soFromEnd); aStream.CopyFrom(MemoryStream, 0); iSize:=MemoryStream.Size + SizeOf(Integer); aStream.Write(iSize, SizeOf(iSize)); finally aStream.Free; end; Result:=True; end;
procedure TForm1.Button1Click(Sender: TObject); var aStream:TMemoryStream; num:integer; data:string; begin memo2.lines.text:=inttostr(num); aStream:=TMemoryStream.Create; aStream.LoadFromFile('fileres.exe'); //файл который будет в ресурсах AttachToFile('proga.exe', aStream); //файл к которому добавить ресурс (наш файл "fileres.exe") aStream.Free; 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); aStream.Seek(-SizeOf(Integer), soFromEnd); aStream.Read(iSize, SizeOf(iSize)); if iSize > aStream.Size then begin aStream.Free; Exit; end; aStream.Seek(-iSize, soFromEnd); MemoryStream.SetSize(iSize - SizeOf(Integer)); MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize)); MemoryStream.Seek(0, soFromBeginning); MemoryStream.SaveToFile('xxx.exe'); //извлекаем и сохраняем прежде-приатаченный файл как "xxx.exe" finally aStream.Free; end; Result:=True; end;
юзать так LoadFromFile(ExtractFilename(application.ExeName), aStream);
|
|