【问题标题】:Errors in relative path相对路径错误
【发布时间】:2018-06-20 01:51:29
【问题描述】:

所以这是一个简单的 C++ 程序,用于读取文件并显示其内容。 我的目录结构如下

项目目录 | 数据___ | | |数据.txt | 程序1.cpp

和程序:

#include <iostream>
#include <fstream>

using namespace std;

int main () {
    char char1;

    fstream data; // Because I wanna to write to this file later.
    data.open("../Data/data.txt",ios::out | ios::in);

    if (data.is_open()) {
        for (int i = 0; !data.eof(); ++i) {
            data.get(char1);
            cout << char1 << endl;
        }
        data.close();
    }

    return 0;
}

所以目前我的程序运行良好......但是当我使用时:

data.open("Data/data.txt",ios::out | ios::in);

程序不工作。为什么会这样?理想情况下,上述代码应该可以工作,因为 Data 文件夹与我的 cpp 文件位于同一目录中。

data.open("../Data/data.txt",ios::out | ios::in);

通过使用 2 个点,我们将返回一个目录,但 Data 文件夹不存在。

那么为什么程序使用 2 个点来工作?

【问题讨论】:

  • 路径名是相对于你的当前目录解释的,而不是包含程序的目录。
  • 您的 cpp 文件在哪里与搜索开始的位置无关。可执行文件的当前目录是搜索开始的地方。
  • 知道了...原来我的可执行文件位于项目目录本身的不同文件夹中...谢谢! @Barmar 和迈克
  • 关于for (int i = 0; !data.eof(); ++i),请阅读Why is iostream::eof inside a loop condition considered wrong?。它可以为您节省一些未来的调试。

标签: c++ file directory file-handling


【解决方案1】:

查看您的目录结构,我发现您的 program1.cpp 和 data.txt 都在同一个“Data”文件夹中。由于您已经在 Data 文件夹中,因此“Data/data.txt”会查找另一个 Data 文件夹。在 UNIX 中,“..”表示上一个目录。因此,当您使用“..”时,您会转到“项目目录”,其中包含一个“数据”文件夹。这就是 data.open("../Data/data.txt",ios::out | ios::in) 工作的原因。您也可以尝试使用以下方法: data.open("data.txt",ios::out | ios::in);

【讨论】:

    猜你喜欢
    • 2016-04-13
    • 2013-06-04
    • 2017-01-01
    • 2013-10-08
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    相关资源
    最近更新 更多