2017-01-03 3 views
1

私はCS106Lコースリーダーから小さなゲームを書いています。私はClionとWindowを使います。
私はmain.cppなどの直接の場所にlevel.txtを置いていますが、level.txtというより、ファイルを読むためにフルネームを入力する必要があるのはなぜですか? コアコードは次のとおりです。
`` `CClion - 完全なパスを入力する必要があるのはなぜですか?

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(); 
    } 
} 

` `` 出力は次のようになります。
error

私のプロジェクトの構造体: error2

答えて

3

仮に現在の作業Snake.exeを呼び出すときのディレクトリは、level.txtを含むディレクトリと同じではありません。コマンドラインで実行されるプログラムは、それらを実行したシェルから現在の作業ディレクトリを継承します。

+0

ありがとうございました。 –

+0

@KerwinXiaoはそのような場合に典型的に答えを受け入れるでしょう。ポイント、貴重なポイント。 –

0

Danが述べたように、相対パスは.exeファイルの場所に関連している必要があります。 IDEからプログラムをビルドして実行する場合、.exeファイルはいくつかのCLionディレクトリ内に作成されます。 .exeファイルの場所をもっとコントロールしたいのであれば、CMakeLists.txtに次の行を追加することができます(add_executable前に仮定します)。

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "path_to_directory_of_your_exe") 

これは私が時々相対パスを使用して行うことです。

関連する問題