fopen() gibt einen NULL-Zeiger, aber die Datei definitiv vorhanden ist
Den code habe ich wie folgt:
FILE *txt_file = fopen("data.txt", "r");
if (txt_file == NULL) {
perror("Can't open file");
}
Die Fehlermeldung zurückgegeben wird:
Kann nicht geöffnet werden Datei: Keine solche Datei oder das Verzeichnis
In der Datei 'data.txt" auf jeden Fall existiert im Arbeitsverzeichnis (es existiert in dem Verzeichnis, das enthält meine .c und .h-Dateien), also warum ist fopen() Rückgabe eines NULL-pointer?
sind Sie die Ausführung von der Kommandozeile oder aus einer IDE? Wenn IDE, sind Sie sicher, dass das Programm das Arbeitsverzeichnis auf das Verzeichnis gesetzt, enthält die Datenbank?
hinzufügen Sie können die Ausgabe von
du vielleicht nicht die Berechtigung haben, um es zu öffnen. sind Sie auf linux?
Können Sie fügen Sie den gesamten code?
Sie können das aktuelle Verzeichnis mit dem _getcwd () - Funktion, verwenden, zum Debuggen und lernen Sie das Arbeitsverzeichnis von Visual Studio läuft Ihr Programm.
hinzufügen Sie können die Ausgabe von
ls -Fal
für das Verzeichnis, in Frage?du vielleicht nicht die Berechtigung haben, um es zu öffnen. sind Sie auf linux?
Können Sie fügen Sie den gesamten code?
Sie können das aktuelle Verzeichnis mit dem _getcwd () - Funktion, verwenden, zum Debuggen und lernen Sie das Arbeitsverzeichnis von Visual Studio läuft Ihr Programm.
InformationsquelleAutor Barjavel | 2011-07-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es möglich, dass das mit dem Namen ist nicht wirklich "data.txt"?
Auf Unix-Dateinamen sind wirklich byte-strings keine Zeichenfolgen, und es ist möglich, Dateien zu erzeugen, die mit Steuerelementen wie die Rücktaste in Ihrem Namen. Ich habe Fälle gesehen, in der Vergangenheit, in der kopieren-einfügen in die Klemme geführt, die in Dateien mit der gewöhnlichen aussehende Namen, aber Versuch Sie zu öffnen, den Dateinamen, erscheint in einem Verzeichnis führt zu einem Fehler.
Einen Weg, zu sagen, für Sie sicher, dass die Dateinamen wirklich das sind, was Sie denken, Sie sind:
Es stellte sich heraus, der Fall zu sein.
InformationsquelleAutor wberry
Standard-problem. Versuchen
I. e. versuchen Sie, öffnen Sie es mit dem vollen absoluten Pfad zuerst ; wenn es funktioniert, dann Sie müssen nur herausfinden, was das aktuelle Verzeichnis ist mit
_getcwd()
und dann reparieren Ihren relativen Pfad.InformationsquelleAutor Jacob
Stellen Sie sicher, dass Ihre Eingabe-Datei in demselben Verzeichnis wie die ausführbare Datei, die kann anders sein als das, in dem die Quelldateien gespeichert sind. Wenn Sie das Programm ausführen, eine IDE-debugger, stellen Sie sicher, dass Ihr Arbeitsverzeichnis festgelegt ist die Lage der input-Datei. Auch, wenn Sie in *nix lieber als Windows, müssen Sie möglicherweise stellen Sie ein "./" zu den input-Dateinamen.
./
um einen Dateinamen übergebenfopen()
auf UNIX.InformationsquelleAutor Kevin D.
Unsichtbare LEERZEICHEN im Dateinamen?
Einmal im Jahr, ich habe ein ähnliches problem:
Ich versuche zum öffnen einer Datei mit dem Dateiname in eine Zeichenfolge, die aus einem Stachel-Vorgang. Wenn ich drucken den Namen scheint es OK, aber fopen() gibt einen null-Zeiger. Die einzige Hilfe ist, drucken Sie den Namen mit der Trennzeichen zeigt den genauen Beginn und das Ende der mit dem Namen string. Natürlich ist dies nicht nicht helfen, mit nicht druckbaren Zeichen.
InformationsquelleAutor karsten
Mein problem war, dass ich eine Datei hatte filename.txt und ich wusste gar nicht, dass es in der Realität filename.txt.txt aufgrund von windows zeigt nicht die Erweiterung.
InformationsquelleAutor Janne
Ich hatte gerade ein ähnliches Problem wie das, wo ich wusste, dass der Weg richtig war und die Datei wurde in die richtige Lage. Überprüfen Sie die Datei Berechtigungen. Es ist möglich, dass das Programm kann nicht die Datei zugreifen, da ist es immer permission denied.
InformationsquelleAutor Nautilus