Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Problem mit FileStream
HenryHux - Sa 19.02.11 22:53
Titel: Problem mit FileStream
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 - 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.
HenryHux - Sa 19.02.11 23:06
jaenicke hat folgendes geschrieben : |
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. |
:flehan: :flehan: :flehan: :flehan: :flehan:
Danke, das wär das Letzte auf das ich gekommen wäre :D
Habe mich jetzt für TStringStream entschieden.
Danke!
Edit : Was mich noch interessiert, wie mache ich einen ZeilenUmsprung?
Edit2 : Probiert und klappt mit #13#10; =)
Gerd Kayser - So 20.02.11 03:04
Mach einen AnsiString daraus.
Edit: Sorry, hatte die anderen Beiträge übersehen.
Delete - 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? :roll:
Gerd Kayser - So 20.02.11 04:48
Luckie hat folgendes geschrieben : |
| 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? :roll: |
Es ist ja schön, daß z. B. XE Unicode unterstützt. Aber das heißt ja nicht, daß man fortan nur noch Unicode verwenden muß oder darf. Es gibt sicherlich Gründe, die für die Verwendung von Unicode sprechen, aber es gibt auch gute Gründe dagegen. Zum Beispiel einen Lieblingseditor, der noch kein Unicode unterstützt. Die Fehlerbeschreibung von HenryHux deute ich jedenfalls so.
jaenicke - 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 - 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 :D
Lg
jaenicke - 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!