Aufpassen bei File-Library!

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
Hyper
Beiträge: 194
Registriert: 19.04.2005 19:14

Aufpassen bei File-Library!

Beitrag von Hyper »

Hallo Gefährten,

--------------
EDIT: Kein Bug, sondern geänderte Funktionalität, siehe unten, Gruß Hyper.
--------------

ich habe gerade einen sehr gefährlichen Bug in PB4.00 entdeckt. Hier sind 2 Programme zum Nachstellen:

Code: Alles auswählen

; Programm "Schreiben"
; --> laufen lassen und im Debugger stehen lassen

CreateFile(1, "c:\test.dat")
WriteLong(1,545)
For i = 1 To 1000
  WriteStringN(1,"TEXT::::::"+Str(i))
Next

Debug "File-Laenge= " + Str(Lof(1))

CallDebugger

Code: Alles auswählen

; Programm "Lesen"
; --> 1) Test mit Prg. "Schreiben" - im Debugger aktiv        ==> FEHLER!
; --> 2) Prg. "Schreiben" beenden, Programm "Lesen" Neustart  ==> ok

CopyFile("c:\test.dat", "c:\copy.dat")
ReadFile(1,"c:\copy.dat")

Debug ReadLong  (1)
For i = 1 To 1000
  Debug ReadString(1)
Next

Debug "File-Laenge= " + Str(Lof(1))

CallDebugger
Fazit:
- Wenn Programm "Schreiben" noch aktiv ist, kann Programm "Lesen" nur bis Satz 826 die Daten lesen!
- Wird Programm "Schreiben" beendet, funktioniert das Lesen.

Meines Erachtens ein schwerer Bug.
Zuletzt geändert von Hyper am 09.04.2006 13:26, insgesamt 1-mal geändert.
PB 5.72
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Es kann nur auf eine Datei schreibend zugegriffen werden!
Der Bug ist ein anderer. Dein Test!!! Datei muß geschlossen werden,
ansonsten wird der Buffer nicht flashed!

Wer seine Testdaten in das Root vom Systemdrive schreibt :freak:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Hyper
Beiträge: 194
Registriert: 19.04.2005 19:14

Beitrag von Hyper »

Aha, mein Test ist der Bug. So einfach ist das.
Wie erklärst Du Dir dann, dass das Problem unter PB3.94 nicht auftritt?
PB 5.72
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Weil die Daten dort nicht gebuffered wurden, sondern sofort geschrieben.
Deswegen war es ja auch so lahmarschig.
Das Buffern ist aber Standard. Macht Windows auch.

Eine zum schreiben geöffnete Datei ist gesperrt. Nur zum lesen kann eine
Datei auch mehrmals geöffnet werden.

Vielleicht solltest Du mal die Hilfe lesen!!!
Dateioperationen sind zu Prüfen,
siehe auch gleich mal bei If nach :mrgreen:
Zuletzt geändert von ts-soft am 09.04.2006 12:22, insgesamt 1-mal geändert.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Hyper hat geschrieben:Aha, mein Test ist der Bug. So einfach ist das.
Wie erklärst Du Dir dann, dass das Problem unter PB3.94 nicht auftritt?
unter PB4 sind die File-Funktionen optimiert worden. Wenn man
beispielsweise mit WriteString in eine Datei schreibt, dann wird nicht String
für String direkt auf den Datenträger geschrieben, sondern ein interner
Speicher (Buffer) gefüllt, der ab einem bestimmten Füllgrad die Daten in
einen Rutsch auf die Platte schreibt. Das erhöht die Geschwindigkeit, mit der
eine Datei gespeichert werden kann. Du hast mit Deinem Beispiel einen
Buffer mit 826 Zeilen auf die Platte geschrieben. Die restlichen 174 Zeilen
liegen noch im Speicher und werden erst mit einem CloseFile (oder
Programmende) 'geflusht'.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Hyper
Beiträge: 194
Registriert: 19.04.2005 19:14

Beitrag von Hyper »

Ok, das verstehe ich. Man muss es nur wissen. Ich hatte in meinem Programm relativ lange gesucht, bis ich die Ursache fand.

@ts-soft: Ich dachte, wir hätten gemeinsam das Ziel, PB4.00 zu testen...
PB 5.72
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Ok, das verstehe ich.

prima! Dann kannst Du ja jetzt den Betreff Deines Postings ändern, damit
andere PureBoardler keinen Schreck bekommen.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Hyper
Beiträge: 194
Registriert: 19.04.2005 19:14

Beitrag von Hyper »

Klar doch, war auch schon dabei. Danke und noch einen schönen Sonntag.
PB 5.72
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> @ts-soft: Ich dachte, wir hätten gemeinsam das Ziel, PB4.00 zu testen...
Machen wir doch auch, aber der Testcode darf nicht fehlerhaft sein :wink:
Wenn Du also Fehler findest, guck Dir Deinen Code noch 5x an und überpüfe
jeden Befehl anhand der Hilfe. Wenn Du Dir nicht sicher bist, dann wähle
einen anderen Titel oder frage, ob dies ein Bug ist <)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Gesperrt