Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi FileStream hängt unerwünschte Zeichen an (https://www.delphipraxis.net/47881-filestream-haengt-unerwuenschte-zeichen.html)

Dash 17. Jun 2005 11:04


FileStream hängt unerwünschte Zeichen an
 
Hi,

ich habe aus dem SwissDelphiCenter diesen Code benutzt um Daten an eine EXE-Datei ranzuhängen:
Delphi-Quellcode:
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 Streamgröß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 Streamgröß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;
Nun habe ich vor an die Test.exe dieses ranzuhängen:
Zitat:

^lalalalalalalala
³Œi=JF;NH
³Y}}}v
³ß~ƒ|
³< g†‰ˆŠ†|‹Š‹sf>
@KLX
Öffne ich nun allerdings die Datei mit dem Notepad erscheint dieses:
Zitat:

^lalalalalalalala
³Œi=JF;NH
³Y}}}v
³ß~ƒ|
³< g†‰ˆŠ†|‹Š‹sf>
@ KLXJ
Er hängt an dem KLX einfach ein J dran, warum ? Um die Datei die "gepatcht" wird handelt es sich um ein Runtime-Mdoul einer anderen Programmierumgebung. Wenn ich die Datei nun starte erscheint das die angehängten Daten ungültig sind weil halt hinten noch dieses J und ein paar Leerzeichen dranhängen :evil:

Wie kann man das verhindern??

Greetz
Dash

Dash 18. Jun 2005 09:54

Re: FileStream hängt unerwünschte Zeichen an
 
*push* :(

Phistev 18. Jun 2005 11:34

Re: FileStream hängt unerwünschte Zeichen an
 
Zitat:

Zitat von Dash
Delphi-Quellcode:
    aStream.Write(iSize, SizeOf(iSize));

Überleg mal, was diese Zeile macht...

Dash 18. Jun 2005 11:42

Re: FileStream hängt unerwünschte Zeichen an
 
Die Streamgröße speichern, und? o_O

jfheins 18. Jun 2005 11:51

Re: FileStream hängt unerwünschte Zeichen an
 
Die Streamgröße ist das, was du nich möchtest, dass es angehangen wird (sie kommt nochmal hinter deine angehangenen Daten ;) )

Daten
Streamgröße

Code:
[color=#008000]^lalalalalalalala
³Œi=JF;NH
³Y}}}v
³ß~ƒ| 
³< g†‰ˆŠ†|‹Š‹sf>
@ KLX[/color][color=#ff0000]J...[/color]

Dash 18. Jun 2005 12:01

Re: FileStream hängt unerwünschte Zeichen an
 
Achsooo Fettes THX!! :thumb:

Werde es gleich mal ausprobieren.

Edit: Funzt super !! Danke Euch beiden!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz