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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top