Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#13

AW: [Erledigt] Speichern von RCx-Zeichen in Textdatei

  Alt 17. Jun 2011, 13:51
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.
$2B or not $2B

Geändert von himitsu (17. Jun 2011 um 13:54 Uhr)
  Mit Zitat antworten Zitat