Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi [Erledigt] Speichern von RCx-Zeichen in Textdatei (https://www.delphipraxis.net/161100-%5Berledigt%5D-speichern-von-rcx-zeichen-textdatei.html)

himitsu 17. Jun 2011 12:20

AW: Speichern von RCx-Zeichen in Textdatei
 
AnsiString = 1 Byte pro Zeichen
WideString/UnicodeString = 2 byte pro Zeichen
String = SizeOf(Char) Byte pro Zeichen

Also mußt du nur noch Umrechnen, wo Byte und Chars vermischt wird.

Root2k 17. Jun 2011 12:30

AW: Speichern von RCx-Zeichen in Textdatei
 
Danke dir für diese Information. :thumb:
Jetzt funktioniert alles wie gewünscht.

Geänderte Zeile:
Delphi-Quellcode:
FStream.Write(Pointer(OutputCrypt.Text)^,Length(OutputCrypt.Text)* SizeOf(Char)*2]);


Hab also SizeOf(Char) * 2 gemacht.

Danke nochmal an alle die geantwortet haben.

himitsu 17. Jun 2011 12:51

AW: [Erledigt] Speichern von RCx-Zeichen in Textdatei
 
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
Delphi-Quellcode:
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.

Root2k 17. Jun 2011 13:10

AW: [Erledigt] Speichern von RCx-Zeichen in Textdatei
 
Ok, vielen Dank!! :thumb:
War bis jetzt alles nur für Testzwecke, aber mit dem was du sagst hast du natürlich Recht.

Werde deine Anmerkungen gleich umsetzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:03 Uhr.
Seite 2 von 2     12   

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