Clion - 为什么我需要输入完整路径?

时间:2017-01-03 01:09:38

标签: c++

我正在从CS106L课程读者那里写一个小游戏。我使用Clion和Window 我将level.txt放在main.cpp等的直接位置。但为什么我需要输入全名来读取文件而不是只输入level.txt? 核心代码是:
```C

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

2 个答案:

答案 0 :(得分:3)

假设调用Snake.exe时当前的工作目录与包含level.txt的目录不同。在命令行执行的程序从执行它们的shell继承其当前工作目录。

答案 1 :(得分:0)

正如Dan所说,相对路径应该与您的.exe文件位置相关。如果您从IDE构建并运行程序,则会在某些CLion目录中创建.exe文件。如果您希望更好地控制.exe文件位置,可以将以下行添加到CMakeLists.txt中(在我假设的add_executable之前)。

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "path_to_directory_of_your_exe")

这是我有时为了方便使用相对路径而做的事情。