| Autor |
Beitrag |
HenryHux
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Sa 19.02.11 22:53
Hey, ich wollt mal kurz nachfragen, wie ich richtig mit TFileStream umgehe, denn bei mir gibt es einige Probleme.
Entweder er schreibt nicht den komplette String, oder der String ist total durchpflückt von Leerzeichen
Konstrukt sieht so aus :
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| Var Stream : TFileStream; Text : String; begin Stream := TFileStream.Create('C:\Users\Tobias\Desktop\Projekt\Version 1.0\'+ 'Debug\Win32\Log1.txt', fmOpenReadWrite); Text := 'Hi, ein kleiner test'; Stream.Write(Pointer(text)^, Length(text)); Stream.Free; end; |
Hab kp -.-
Lg
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 19.02.11 23:01
Du solltest nicht vergessen, dass Delphi XE (wie in deinem Profil steht) Unicode verwendet. Dementsprechend schreibst du nur den halben String (da jedes Zeichen 2 Byte hat, du aber nur Length Bytes schreibst), zudem ist jedes zweite Byte bei lateinischen Buchstaben Null (was du wohl umgangssprachlich mit Leerzeichen meinst).
Du könntest entweder die Größe in Bytes korrekt berechnen (Length(Text) * SizeOf(Char)) oder TStringStream verwenden oder AnsiStrings statt UnicodeStrings.
Für diesen Beitrag haben gedankt: HenryHux
|
|
HenryHux 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Sa 19.02.11 23:06
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: So 20.02.11 03:04
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 20.02.11 03:12
Warum denn das? Lange wurde nach einer Unicode-Unterstützung geschrien und jetzt, wenn es Probleme mit Unicode gibt, aus Unwissenheit, dann wird immer vorgeschlagen wieder einen AnsiString zu nehmen. Wozu dann bitte die Unicode-Unterstützung, wenn man sie dann doch nicht nutzt? 
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: So 20.02.11 04:48
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 20.02.11 08:09
Gerd Kayser hat folgendes geschrieben : | | Zum Beispiel einen Lieblingseditor, der noch kein Unicode unterstützt. Die Fehlerbeschreibung von HenryHux deute ich jedenfalls so. |
Manche erwarten auch nur ein BOM am Anfang der Datei.
Wie dem auch sei, wenn es wirklich um eine Logdatei geht, wäre AssignFile + Rewrite/Append + WriteLn + CloseFile wohl besser geeignet. Denn darauf deutet ja die Frage nach dem Zeilenumbruch hin.
|
|
HenryHux 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: So 20.02.11 11:41
jaenicke hat folgendes geschrieben : |
Wie dem auch sei, wenn es wirklich um eine Logdatei geht, wäre AssignFile + Rewrite/Append + WriteLn + CloseFile wohl besser geeignet. Denn darauf deutet ja die Frage nach dem Zeilenumbruch hin. |
Hatte ich vorher auch benutzt. Wollte aber mal probieren, wie das mit dem FileStreaming so funktioniert.
U.a auch, da oft wenn ich das Programm beende er eine Zeile nicht fertiggeschrieben hat.
Gleiches "Problem" aber auch mit FileStream. Naja werd ich mit leben können/müssen
Lg
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 20.02.11 11:48
Wenn das Programm normal beendet wird, dann wurde der FileStream nicht korrekt freigegeben.
Wenn das Programm abstürzt, hilft nur, die Datei aus dem Speicher zu flushen. Das geht bei MMFs gut (FlushViewOfFile oder so). Bei AssignFile öffne und schließe ich die Datei einfach jedesmal, dann ist auch alles drin.
|
|