Добавление текстовой информации в .ехе-файл и чтение ее
Добавление текстовой информации в .ехе-файл и чтение ее
Добавление текстовой информации в .ехе-файл и чтение ее 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); // поиск конца файла aStream.Seek(0, soFromEnd); // копируем данные из MemoryStream aStream.CopyFrom(MemoryStream, 0); // сохраняем размер потока 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); // ищем позицию с которой начинаются сохраненные данные 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); finally aStream.Free; end; Result := True; end; procedure TForm1.Button1Click(Sender: TObject); var aStream: TMemoryStream; begin Memo1.SetFocus; Application.ProcessMessages; Sleep(500); aStream := TMemoryStream.Create; try Memo1.Lines.SaveToStream(aStream); AttachToFile('D:\_Sernum\Proba.exe', aStream); finally aStream.Free; end; aStream := TMemoryStream.Create; try LoadFromFile('D:\_Sernum\Proba.exe', aStream); Memo2.Lines.LoadFromStream(aStream); finally aStream.Free; end; Memo2.SetFocus; Application.ProcessMessages; end;