![]() |
Einzelnen Unicodestring an Datei anhängen
Hallo liebe Delphianer
nach langer Zeit der Überlegung bin ich nun endlich von Delphi7 auf DelphiXE umgestiegen. Ich bin jetzt dabei alle Projekte und Komponenten auf Unicode umzustellen und dabei bin ich auf ein kleines Problem getroffen für das ich etwas Hilfe benötigen würde. In meinen alten Projekten schreibe ich Logfiles welche bei den Kunden teilweise eine Grösse von mehreren GB erreichen können. Alter Code:
Code:
Soweit so gut. Aber jetzt zu mein Problem:Procedure TFComponentTest.WriteLogline(const szFile, szLogline : string); var F1 : textfile; begin AssignFile(F1, szFile); TRY if (FileExists(szFile) = TRUE) then begin Append(F1); end else begin Rewrite (F1); end; writeln (F1, szLogline); FINALLY Closefile (F1); END; end; Ich muss jetzt z.B folgenden String in die Logdatei schreiben Ģenerē vieną įmonė читаете вы его! ÆàëîáûÎáñëóæèâàíèå Als Übergangslösung für diese Kriksikraksi-Zeichen habe ich jetzt folgendes Implementiert:
Code:
Das funktioniert soweit auch recht gut. Nur die Performanze geht mir dabei total in den Keller, da ich bei jeden einzelnen Logeintrag die Datei neu einlesen muss.
Procedure TFComponentTest.WriteLogline1(const szFile, szLogline : string);
var aFileList : TStringlist; Encoding : TEncoding; begin TRY aFileList := TStringlist.Create; if (FileExists(szFile) = TRUE) then begin aFileList.LoadFromFile(szFile); end; aFileList.Text := aFileList.Text + szLogline; aFileList.SaveToFile(szFile, Encoding.Unicode); FINALLY aFileList.Free; END; end; Habt Ihr eine Idee wie ich dieses Problem ev. mit WriteLn lösen könnte? MfG Pit |
AW: Einzelnen Unicodestring an Datei anhängen
Könntest Du nicht einen StringStream mit dem gewünschten Encoding erzeugen und dessen DataString dann an die Datei anhängen?
|
AW: Einzelnen Unicodestring an Datei anhängen
Wenn man Performance wünscht, sollte man wohl einen TFileStream nehmen. StringStreams, StringLists, etc. laden die ganze Datei halt sinnlos in den Arbeitsspeicher.
|
AW: Einzelnen Unicodestring an Datei anhängen
Wer hat denn etwas von Datei laden gesagt? Ich meinte: StringStream erzeugen mit dem gewünschten String und Encoding. Dann Datei öffnen (Rewrite bzw. Append) und mit writeln den String aus dem Stream schreiben.
|
AW: Einzelnen Unicodestring an Datei anhängen
DataString eines TStringStreams ist immer UTF-16 - egal was man als Encoding einstellt?!
Ich würde den String einfach so in "rohe Bytes" umwandeln:
Delphi-Quellcode:
TEncoding.UTF8.GetBytes('Ein beliebiger Text.')
Zitat:
|
AW: Einzelnen Unicodestring an Datei anhängen
Achso, ich dachte, Du beziehst Dich auf mich.
|
AW: Einzelnen Unicodestring an Datei anhängen
Delphi-Quellcode:
Writeln(F1, UTF8Encode(szLogline));
|
AW: Einzelnen Unicodestring an Datei anhängen
*Pff* viel zu einfach, da könnte ja jeder kommen :lol:
|
AW: Einzelnen Unicodestring an Datei anhängen
Zitat:
|
AW: Einzelnen Unicodestring an Datei anhängen
Du kannst eine Zeile an eine Logdatei z.B. so anhängen:
Delphi-Quellcode:
const CRLF : string = #13#10 ; procedure AddToLog(LogFile: string; Msg: string); var FLogStream: TStream; begin if (not FileExists(LogFile)) then begin ForceDirectories(ExtractFilePath(LogFile)) ; FLogStream:= TFileStream.Create(LogFile,fmCreate); end else begin FLogStream:= TFileStream.Create(LogFile,fmOpenReadWrite); end; FLogStream.Seek(0,soFromEnd) ; Msg := Msg + CRLF ; FLogStream.Write(Pointer(Msg)^,Length(Msg)*SizeOf(Char)) ; FreeAndNil(FLogStream) ; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:03 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