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

C++ 如何在C+;中打开具有相对路径的文件+;?,c++,relative-path,ifstream,absolute-path,C++,Relative Path,Ifstream,Absolute Path,我现在正在编写测试用例,并且我创建了一些测试文件,我试图读取这些文件。绝对路径为: /home/user/code/Project/source/Project/components/Project/test/file.dat 但使用绝对路径进行测试显然是不好的。所以我试着把绝对路径转换成相对路径,我不知道为什么它不起作用。我创建了一个具有相对路径的文件 findme.dat 我发现它在 /home/user/code/Project/build/source/Project/compone

我现在正在编写测试用例,并且我创建了一些测试文件,我试图读取这些文件。绝对路径为:

/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.is\u open()
函数返回fulse


你能帮我吗?

你所使用的根本不是一条相对路径。确定您使用的是相对路径语法,但不是它的实际含义

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

此路径以/开头,这意味着root将找到它的父级,该父级将再次返回root,因为root没有父级并继续。。。简化版本如下:

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

因此,它将在根目录中查找文件夹源,而根目录当然不存在

您应该这样做(假设您的代码位于项目文件夹中):

./test/file.dat

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

../test/file.dat


../将您带到当前代码目录的父目录,在本例中假定该目录为Project。

您的程序的当前工作目录是什么?您提供的路径必须相对于CWD。另外,由于路径以
/
开始,这意味着从根开始,并且由于根目录没有父目录,这意味着
/..
/
相同,导致路径等于
/source/Project/components/Project/test/file.dat
,这一切都取决于当前的工作目录。i、 你的“相对”路径不是相对的。它应该以点而不是斜线开始。e、 g./../../../../../../../../../../source/Project/components/Project/test/file.dat谢谢大家,你们帮了很多忙!