Добавить данные в 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. 
 
} 
Теги:
EXE
Добавлено: 31 Июля 2018 07:25:07 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...