Bräuchte Hilfe zum WriteFile-Befehl
Übersicht

![]() |
TravisBetreff: Bräuchte Hilfe zum WriteFile-Befehl |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() 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. |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
bist du dir sicher das du nach dem Laden "CloseFile" benutzt hast.
Eine andere Fehlerquelle kommt mir jetzt nicht in den Sinn. MfG |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group