2017-01-03 2 views
1

Ich schreibe ein kleines Spiel von CS106L Kursleser. Ich benutze Clion und Window.
Ich setze level.txt an der direkten Position mit main.cpp etc. Aber warum muss ich den vollen Namen eingeben, um die Datei zu lesen, anstatt nur level.txt einzugeben? Der Kern-Code ist:
`` `cClion - warum muss ich den vollständigen Pfad eingeben?

void readCorrectFile(ifstream& input) { 
    // Read the user's prompt until user prompt the right file. 
    while (true) { 
     cout << "Enter the file name: "; 
     string filename; 
     getline(cin, filename); 

     // Find if it's a valid name 
     input.open(filename.c_str()); 
     if (input.is_open()) { 
      return; 
     } 

     // Show info about read file. 
     cout << "Sorry, we cannot find: " << filename << endl; 
     input.clear(); 
    } 
} 

` `` Die Ausgabe lautet:
error

Die Struktur meines Projekts: error2

Antwort

3

vorauszusetzen, dass Ihr aktuelles Arbeits Verzeichnis beim Aufruf Snake.exe ist nicht das gleiche wie das Verzeichnis, das level.txt enthält. Programme, die in der Befehlszeile ausgeführt werden, erben ihr aktuelles Arbeitsverzeichnis von der Shell, die sie ausgeführt hat.

+0

Danke, ich verstehe es. –

+0

@KerwinXiao normalerweise würden Sie in diesem Fall die Antwort akzeptieren. Punkte, wertvolle Punkte. –

0

Wie Dan sagte, sollte ein relativer Pfad relativ zum Speicherort Ihrer .exe-Datei sein. Wenn Sie Ihr Programm von der IDE erstellen und ausführen, wird die .exe-Datei in einigen CLion-Verzeichnissen erstellt. Wenn Sie mehr Kontrolle über den Speicherort Ihrer .exe-Datei haben möchten, können Sie Ihrer CMakeLists.txt (vor add_executable nehme ich an) die folgende Zeile hinzufügen.

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "path_to_directory_of_your_exe") 

Dies ist etwas, das ich manchmal für die Bequemlichkeit mit relativen Pfaden tun.

Verwandte Themen