Seite 1 von 1
ReadString() Bug?
Verfasst: 01.07.2008 21:20
von Thorsten1867
Scheinbar wird nicht dasselbe ausgelesen, was geschrieben wurde:
Code: Alles auswählen
Test.s = "Das ist ein Test"
Debug "--- Schreiben ---"
FId = CreateFile(#PB_Any, "E:\Temp\Test.dat")
If FId
Debug "Text: " + Test + " ("+Str(Len(Test))+")"
WriteString(FId, Test)
WriteLong(FId, Len(Test))
Debug "Länge: "+Str(Len(Test))
CloseFile(FId)
EndIf
Debug "--- Lesen ---"
RId = ReadFile(#PB_Any, "E:\Temp\Test.dat")
If RId
Test.s = ReadString(RId)
Debug "Text: " + Test + " ("+Str(Len(Test))+")"
TestLen.l = ReadLong(RId)
Debug "Orginallänge: "+Str(TestLen)
EndIf
--- Schreiben ---
Text: Das ist ein Test (16)
Länge: 16
--- Lesen ---
Text: Das ist ein Test (17)
Orginallänge: 0
Re: ReadString() Bug?
Verfasst: 01.07.2008 21:30
von Kiffi
PB-Hilfe hat geschrieben:
[ReadString()] Liest einen String aus der '#Datei', bis ein 'End Of Line'
(deutsch: "Ende der Zeile") Zeichen gefunden wird (Unix- und
DOS-Dateiformate werden unterstützt).
... oder aber vorher EOF() eintritt.
also wird Dein Long ebenfalls mit ReadString() gelesen
Grüße ... Kiffi
Verfasst: 01.07.2008 21:48
von Thorsten1867
Sollte WriteString() nicht genau dies EOF() am Ende des Strings anhängen?
Verfasst: 01.07.2008 22:00
von ts-soft
Thorsten1867 hat geschrieben:Sollte WriteString() nicht genau dies EOF() am Ende des Strings anhängen?
WriteString schreibt doch kein EOF() (end of file) hinterm string
Wenn Du Strings mit anderen Daten mixt, mußte selber für eine Trennung
sorgen. In früheren Versionen wurde wohl automatisch eine 0 angefügt, aber
das ist ja nicht immer gewünscht.
Andere Sprachen haben deshalb meist einen Text und einen Binärmodus, in
PB haste immer einen Binärmodus, so das man Text und andere Daten
mixen kann, aber selber für die Trennung beim mixen zuständig ist.
Gruß
Thomas
Verfasst: 01.07.2008 22:06
von Thorsten1867
Bin wohl von PokeS() usw. ausgegangen, wo das Stringende immer automatisch mit angehängt wird.
Hätte nicht gedacht, dass sich ein String im Speicher einfacher auslesen lässt als aus eine Datei.
Aber Danke, mein komprimiertes Dateiformat funktioniert jetzt. Hätte den String vielleicht direkt aus dem Speicher mit WriteData() schreiben sollen, dann hätte ich mir eine Menge Ärger erspart.

Verfasst: 01.07.2008 22:21
von HeX0R
Ähhh, wieso nimmst du nicht WriteStringN() ?
Verfasst: 01.07.2008 22:32
von ts-soft
HeX0R hat geschrieben:Ähhh, wieso nimmst du nicht WriteStringN() ?
Gute Frage, hab ich auch gerade nicht dran gedacht

Verfasst: 04.07.2008 17:36
von Thorsten1867
Habe ich auch gemacht, nachdem ich wusste wo das Problem zu suchen war.
WriteStringN() hatte ich bisher nur mit Textdateien und Zeilenumbrüchen in Verbindung gebracht und nicht mit dem Setzen eines EndOfString-Zeichens.
