C ++ - Es konnte keine Datendatei geladen!
Frage
Ich habe eine einfache Textdatei, die ich lädt, in einem C ++ Programm. Für seltsame Gründe ist es nicht funktioniert:
- Ich habe versucht, es unter Windows vorausgesetzt, die Datei im selben Verzeichnis war. ist fehlgeschlagen
- Ich habe versucht, es unter Windows, indem Sie die Datei in C bewegt: \ Verzeichnis. gearbeitet
- Ich versuche es auf Linux die Datei im gleichen Verzeichnis setzen. ist fehlgeschlagen
Das Snippet:
void World::loadMap(string inFileName) {
ifstream file(inFileName.c_str(), ios::in);
if (file) {
}
else
{
cout<<"Error when loading the file \n";
exit(-1);
}
}
Ich nenne die loadMap Methode wie folgt:
World::Instance()->loadMap("Map.dat");
(World ist eine Singleton-Klasse).
Wie kann ich den genauen Fehler finden, unter Verwendung von try-catch oder irgendetwas anderes?
Lösung
Das Problem ist, das Arbeitsverzeichnis.
Wenn Sie einen relativen Pfad für eine Datei angeben, verwendet es das Arbeitsverzeichnis (das nicht das gleiche wie das Verzeichnis sein kann, wenn Sie Anwendung auf dem Dateisystem gespeichert ist).
- So benötigen Sie entweder einen absoluten Pfad zu verwenden.
- Oder Sie müssen das aktuelle Arbeitsverzeichnis finden und die Datei relativ geben.
- Oder das aktuelle Arbeitsverzeichnis ändern.
Andere Tipps
Standardmäßig wird eine Datei (oder eine andere I / O-Operation) zu öffnen, andernfalls keine Ausnahme ausgelöst. Sie können dieses Verhalten ändern, aber der Standard sieht noch keine Möglichkeit, von einer Ausnahme für Fehler, den genauen Grund zu extrahieren.
Linux-Dateinamen sind case-sensitive.
Ist Ihre Datei map.dat
tatsächlich benannt?
Auch haben sie versucht, die Datei im aktuellen Verzeichnis setzen?
Roger Pate Kommentar:
Mit
"./filename"
(die./
angenommen wird, und nicht einmal erforderlich) tragbar ist für Windows und Linux, könnte das Problem sein, dass die CWD ist nicht das, was er denkt, ist es aber.