如何在C++中打开具有相对路径的文件?

Pet*_*111 6 c++ relative-path absolute-path ifstream

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

/home/user/code/Project/source/Project/components/Project/test/file.dat
Run Code Online (Sandbox Code Playgroud)

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

findme.dat
Run Code Online (Sandbox Code Playgroud)

我找到了它

/home/user/code/Project/build/source/Project/components/Project/test/findme.dat
Run Code Online (Sandbox Code Playgroud)

所以我创建了相对路径

/../../../../../../source/Project/components/Project/test/file.dat
Run Code Online (Sandbox Code Playgroud)

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

你能帮助我吗?

Usa*_*far 11

你所使用的并不是一条相对的道路.当然你使用的是相对路径语法,但不是它的实际含义.

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

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

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

所以它会在root中查找当然不存在的文件夹源.

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

./test/file.dat

或者如果它在Project文件夹中的某个其他文件夹中,您可以执行以下操作:

../test/file.dat

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