Also irgendwie komme ich nicht weiter...
Der Stream ist nach dem Codieren und Dekodieren mit den Funktionen der Base64.pas von Daniel Wischnewski 4 Bytes größer als vorher und die Datei entsprechend unbrauchbar.
Ich habe zu testzwecken den Windows-Taschenrechner calc.exe verwendet.
Größe vor dem Codieren: 114688 Byte, Größe nach dem Dekodieren: 114692 Byte.
Das Problem habe ich mit jeder Datei...
Delphi-Quellcode:
function MemoryStreamToStr(const MemoryStream: TMemoryStream): string;
var
StringStream: TStringStream;
begin
StringStream := TStringStream.Create('');
try
StringStream.CopyFrom(MemoryStream, MemoryStream.Size);
Result := StringStream.DataString;
finally
StringStream.Free;
end;
end;
procedure StringToStream(aStr : String; MemoryStream: TMemoryStream);
var
aStrLen : Integer;
begin
aStrLen:=Length(aStr);
MemoryStream.WriteBuffer(aStrLen,SizeOf(Integer));
MemoryStream.WriteBuffer(Pointer(aStr)^,aStrLen);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ms:TMemoryStream;
temp: AnsiString;
begin
//MemoryStream erstellen
ms:=TMemoryStream.Create;
ms.LoadFromFile('./calc.exe');
//Größe des Streams ausgeben
ShowMessage( IntToStr(ms.Size) );
//Stream in String speichern
temp:=MemoryStreamToStr(ms);
//Stream freigeben
ms.Free;
//String Codieren
temp:=Base64Encode(temp);
//Testweise String ausgeben
Memo1.Text:=temp;
//String Decodieren
temp:=Base64Decode(temp);
//MemoryStream erstellen
ms:=TMemoryStream.Create;
//String in Stream speichern
StringToStream(temp,ms);
//Ausgeben Streamgröße nach Codieren und Decodieren
ShowMessage( IntToStr(ms.Size) );
//Stream in Datei speichern
ms.SaveToFile('./calc2.exe');
end;