Zitat:
Delphi-Quellcode:
procedure TForm1.BtnSaveClick(Sender: TObject);
var
FStream: TStream;
const
OutFileName: string = 'd:\tmp.txt';
begin
ForceDirectories(ExtractFilePath(OutFileName)) ;
FStream := TFileStream.Create(OutFileName,fmCreate) ;
FStream.Write(Pointer(OutputCrypt.Text)^,Length(OutputCrypt.Text)* SizeOf(Char)) ; // Chars + Chars = OK
FreeAndNil(FStream); // nicht nötig, da die Variable eh gleich weggeworfen wird
// kein Ressourcenschutzblog?
end;
procedure TForm1.BtnReadClick(Sender: TObject);
var
InputFile: TFileStream;
TmpText: String;
const
outFileName: string = 'd:\tmp.txt';
begin
InputFile := TFileStream.Create(outFileName, fmOpenRead);
try
SetLength(TmpText, InputFile.Size); // Chars + Bytes = Fehler
InputFile.Read(TmpText[1], InputFile.Size); // Bytes + Bytes = OK
finally
InputFile.Free;
// hier gibt es einen :)
end;
OutputDecrypt.Text := TmpText;
end;
Delphi-Quellcode:
procedure TForm1.BtnSaveClick(Sender: TObject);
var
FStream: TStream;
TmpText: String;
const
OutFileName: string = 'd:\tmp.txt';
begin
ForceDirectories(ExtractFilePath(OutFileName)) ;
FStream := TFileStream.Create(OutFileName,fmCreate) ;
try
TmpText := OutputCrypt.Text;
if TmpText <> '' then
FStream.Write(TmpText[1], Length(TmpText) * SizeOf(Char)) ;
finally
FStream.Free;
end;
end;
procedure TForm1.BtnReadClick(Sender: TObject);
var
InputFile: TFileStream;
TmpText: String;
const
outFileName: string = 'd:\tmp.txt';
begin
InputFile := TFileStream.Create(outFileName, fmOpenRead);
try
SetLength(TmpText, InputFile.Size div SizeOf(Char));
if TmpText <> '' then
InputFile.Read(TmpText[1], Length(TmpText) * SizeOf(Char));
finally
InputFile.Free;
end;
OutputDecrypt.Text := TmpText;
end;
Du solltest dich auf eine Art der Fehlerbehandlung, bzw. des Ressourcenschutzes einigen
und an der richtigen Stelle umrechnen, denn
Length(OutputCrypt.Text)* SizeOf(Char)*2
war die falsche Stelle.
Wenn das Schreiben nicht dem Lesen ähnelt, dann ist da irgendwas falsch, bzw. das Konzept stimmt nicht.
PS: Besser ReadBuffer und WriteBuffer, statt Read und Write verwenden, wenn du schon dessen Rückgabewerte nicht prüfst.