【问题标题】:How to open a file with relative path in C++?如何在 C++ 中打开具有相对路径的文件?
【发布时间】:2016-06-24 21:53:49
【问题描述】:

我现在正在编写测试用例,并创建了一些我尝试阅读的测试文件。绝对路径是:

/home/user/code/Project/source/Project/components/Project/test/file.dat

但是由于显而易见的原因,使用绝对路径进行测试是不好的。所以我尝试将绝对路径转换为相对路径,但我不知道为什么它不起作用。我用相对路径创建了一个文件

findme.dat

我发现它在

/home/user/code/Project/build/source/Project/components/Project/test/findme.dat

所以我创建了相对路径

/../../../../../../source/Project/components/Project/test/file.dat

但文件未打开且未与is 对象关联, std::ifstream is (path);is.is_open() 函数返回 fulse。

你能帮帮我吗?

【问题讨论】:

  • 你程序的当前工作目录是什么?您提供的路径必须与 CWD 相关。此外,由于您以/ 开始路径,这意味着您从在根目录 开始,并且由于根目录没有父目录,这意味着/../ 相同,领先到你的路径等于/source/Project/components/Project/test/file.dat
  • 这一切都取决于当前的工作目录。即您的程序所在的位置。
  • 您的“相对”路径不是相对的。它应该以点而不是斜线开头。例如 ./../../../../../../source/Project/components/Project/test/file.dat
  • 谢谢大家,你们帮了大忙!

标签: c++ relative-path ifstream absolute-path


【解决方案1】:

您使用的根本不是相对路径。确定您使用的是相对路径语法,而不是它的实际含义。

/../../../../../../source/Project/components/Project/test/file.dat

这个路径以 / 开头,这意味着 root 然后找到它的父级,由于 root 没有父级并继续返回 root 再次返回......这个的简化版本是:

/source/Project/components/Project/test/file.dat

所以它会在根目录中寻找当然不存在的文件夹源。

你应该做的是这样的(假设你的代码在项目文件夹中):

./test/file.dat

或者如果它位于项目文件夹中的其他文件夹中,您可以执行以下操作:

../test/file.dat

../ 将您带到当前代码目录的父级,在这种情况下假设是 Project。

【讨论】:

    猜你喜欢
    • 2011-04-15
    • 2011-04-28
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 2016-10-05
    • 1970-01-01
    相关资源
    最近更新 更多