Bräuchte Hilfe zum WriteFile-Befehl

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Travis

Betreff: Bräuchte Hilfe zum WriteFile-Befehl

BeitragDo, Jan 29, 2004 22:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Man sollte es nicht glauben, aber ich habe tatsächlich Probleme mit diesem Befehl. Vielleicht könntet ihr mir da helfen.

Und zwar habe ich einen Leveleditor, der beim abspeichern der Levels eine Datei erstellt. Das klapptproblemlos, aber wenn ich ein vorhandenes Level öffne, dann verändere und wieder speichern will, gibt es die Fehlermeldung "Stream does not exist" und die Variable "Datei = WriteFile(File$)" hat den Wert Null. Daraus schließe ich, daß die Datei nicht erstellt werden konnte. Obwohl die Datei (File$) nicht geändert wurde. Normalerweise sollte es doch dann einfach überschrieben werden.

Hier mal die entscheidene Codestelle:

Code: [AUSKLAPPEN]

Datei = WriteFile(File$)

 If Datei = 0 Then RuntimeError"Datei konnte nicht erstelllt werden!"


Dieser Fall dürfte doch gar nicht eintreten, wenn man vor der Änderung des Levels noch problemlos speichern konnte und der Dateiname nicht geändert wurde. Rolling Eyes

Das macht mich echt unglücklich...
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

D2006

Administrator

BeitragDo, Jan 29, 2004 23:46
Antworten mit Zitat
Benutzer-Profile anzeigen
bist du dir sicher das du nach dem Laden "CloseFile" benutzt hast.
Eine andere Fehlerquelle kommt mir jetzt nicht in den Sinn.

MfG

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragFr, Jan 30, 2004 0:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Test PRG Code vor test speichern
Code: [AUSKLAPPEN]
File$="test.dat"
X$= "testStringData"
Datei = WriteFile(File$)
 If Datei = 0 Then RuntimeError"Datei konnte nicht erstelllt werden!"
Print Datei + "  Wert der Datei"
WriteString (Datei,X$)
CloseFile Datei
Print "Datei abgespeichert !  " +X$
   Print "Mausklick"
   MouseWait

Datei = ReadFile(File$)
 If Datei = 0 Then RuntimeError"Datei konnte nicht erstelllt werden!"
 Print Datei + "  Wert der Datei"
x$= ReadString (Datei)
CloseFile Datei
Print "Datei gelesen!    " + x$
   Print "Mausklick"
   MouseWait

x$ = "000111" + x$
Datei = WriteFile(File$)
 If Datei = 0 Then RuntimeError"Datei konnte nicht erstelllt werden!"
Print Datei + "  Wert der Datei"
WriteString (Datei,x$)
CloseFile Datei
Print "Datei abgespeichert !  " +X$
   Print "Mausklick"
   MouseWait
   
Datei = ReadFile(File$)
 If Datei = 0 Then RuntimeError"Datei konnte nicht erstelllt werden!"
 Print Datei + "Wert der Datei"
x$=ReadString (Datei)
CloseFile Datei
Print "Datei gelesen!    " + x$
   Print "Mausklick"
   MouseWait

fehlendes Closefile dürfte den fehler nicht verursachen, verursacht nur falsche daten in der Datei!
kann es sein das die File$ = "" ist, oder nicht global
[BB2D | BB3D | BB+]

Travis

BeitragFr, Jan 30, 2004 15:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Nach wirklich Stundenlangem suchen habe ich's gefunden. Ich habe kürzlich in den Editor eine Funktion eingebaut die mir zeigt, wieviel Level bereits vorhanden sind. Dazu habe ich folgenden Code benutzt

Code: [AUSKLAPPEN]

; --- Anzahl der vorhandenen Levels bestimmen
Function LevelAnzahl()
 Anzahl = 1
 Repeat
  Status = OpenFile("Levels\" + Verz$ + "\Level" + Anzahl + ".lvl")
  If Not Status = 0 Then Anzahl = Anzahl + 1
 Until Status = 0
 Anzahl = Anzahl - 1
 Return Anzahl
End Function


In dieser Funktion habe ich alle Levels nacheinander geöffnet, aber nicht wieder geschlossen. Dann habe ich nach dem Zählen (Anzahl = Anzahl + 1) noch "CloseFile Status" eingefügt und das Problem war endlich gelöst.

Zum Glück hatte ich noch jede Menge frühere Versionen des Editors zur Hand und so konnte ich den Fehler bis zu einer bestimmten Version zurückverfolgen und habe mir dann angeguckt, was ich seit der letzten Fehlerfreien Version Verändert hatte.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

Hubsi

BeitragFr, Jan 30, 2004 15:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Repeat
 Status = OpenFile("Levels\" + Verz$ + "\Level" + Anzahl + ".lvl")
 If Not Status = 0 Then Anzahl = Anzahl + 1
 CloseFile Status ; <= Sollte man möglichst nie vergessen
Until Status = 0

An Status wird nur das Handle der Datei übergeben. Wenn Du das Handle überschreibst bleibt die Datei trotzdem offen. Besser geeignet für solche Geschichten ist ohnehin FileType:
Code: [AUSKLAPPEN]
Status = FileType("Levels\" + Verz$ + "\Level" + Anzahl + ".lvl")
If Status = 1 Then Anzahl = Anzahl + 1
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Travis

BeitragFr, Jan 30, 2004 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Aha. Das heißt mit FileType wird die Datei gar nicht geöffnet?

Ich hatte das jetzt so gelöst:
Code: [AUSKLAPPEN]

Function LevelAnzahl()
 Anzahl = 1
 Repeat
  Status = OpenFile("Levels\" + Verz$ + "\Level" + Anzahl + ".lvl")
  If Not Status = 0 Then
   Anzahl = Anzahl + 1
   CloseFile Status
  EndIf
 Until Status = 0
 Anzahl = Anzahl - 1
 Return Anzahl
End Function


Aber deine Lösung ist irgendwie eleganter und spart noch ein paar Codezeilen. Danke Smile

PS: Bitte nicht wundern, warum ich die Anzahl zuerst auf 1 setze und dann später wieder Eins abziehe. Das mache ich, weil ich bei 1 anfange zu zählen. Level "Null" gibt's nämlich nicht!
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group