fopen("test.dat", "w") liefert NULL zurück??
-
Hallo Leute, wie kann sowas passieren. Ich war bislang immer der Meinung, dass ein Öffnen mit "w" auf jeden Fall eine neue Datei erzeugt.
Welche Gründe kann es geben, dass die Datei nicht geöffnet wird, oder warum liefert der sonst NULL zurück.Gruß Ranger
-
Keine Schreibrechte?
Du kannst auch reindebuggen, dass siehst Du warum es nicht geht...
-
kein speicherplatz, falscher pfad, deine backslashes nicht geescapt, ...
-
Keine ausreichenden Rechte? Datei wird bereits benutzt?
Schau halt mit GetLastError() was der Fehler war.
-
Also Rechte gibt es unter Dos doch gar nicht. Ein vorheriges fcloseall() lieferte den Wert 0, was bedeutet, es ist keine auf gewesen, die zu schließen war. Außerdem kümmert sich DOS nicht um ein Rechte beim Öffnen mit w oder w+.
Speicherplatz ist auch genügend da
Ranger
-
Also unter DOS (wäre geschickt das im OP zu erwähnen) gibt es ja das Attribut "Schreibgeschützt" (hab ich hier fälschlicherweise als "Recht" bezeichnet, sorry).
Hat dein DOS-Compiler keine Funktion ähnlich GetLastError() um den Fehler abzufragen?
-
GetLastError ist eine Win32-Funktion und hat überhaupt nichts mit der CRT Funktion fopen zu tun (auch nicht unter Windows).
Im günstigesten Fall wird noch "errno" gesetzt... (wobei dies in der Doku nicht erwähnt wird...)
-
Jochen Kalmbach schrieb:
GetLastError ist eine Win32-Funktion und hat überhaupt nichts mit der CRT Funktion fopen zu tun (auch nicht unter Windows).
Mit GetLastError() kan man wunderbar auslesen was von fopen() gesetzt wurde. Natürlich nur unter win32. Ich versteh dein Problem nicht.
-
Wenn es geht, dann ist es Zufall. Du kannst nicht davon ausgehen, dass "CreateFile" die letzte Win32-Funtion war die von "fopen" aufgerufen wurde... das ist nur eine Annahme von Dir, die sich jederzeit ändern kann (also zumindest mit anderen CRT Versionen).
-
TactX schrieb:
Jochen Kalmbach schrieb:
GetLastError ist eine Win32-Funktion und hat überhaupt nichts mit der CRT Funktion fopen zu tun (auch nicht unter Windows).
Mit GetLastError() kan man wunderbar auslesen was von fopen() gesetzt wurde. Natürlich nur unter win32. Ich versteh dein Problem nicht.
Außerdem gehts hier um DOS.
MfG SideWinder
-
@ Jochen Kalmbach: O.K., jetzt versteh ich.
@ SideWinder: Ja, ich weiss. Ich bin aber nicht Schuld wenn der OP das nicht oder zu spät mitteilt.
-
Sorry, wenn ich das vergessen habe zu erwähnen. Tut mir leid. Kommt nicht mehr vor.
Ranger
-
Ich nochmal!
Also der errno sagt 4 -> too many open Files
Das kann nun überhaupt nicht sein, weil ein fcloseall() mir 0 zurückliefert, also sind keine Dateien offen.
Ranger
-
fcloseall liefert doch afaik immer 0? Schließ deine früheren Dateien besser mit fclose(f) statt fcloseall().
MfG SideWinder