我读了一些关于相对路径的话题,但我仍然错了。 我希望某人可以帮助我:)。 我正在使用Visual Studio 2013,Windows 7
我有以下目录:
这是我的.exe文件 d:\单向\ C ++ \ EX5 \ msvc2013 \ EX5 \调试
这是我想要阅读的文件 d:\单向\ C ++ \ EX5 \ RES \ thehead.raw
打开文件的代码:
FILE* f;
f = fopen("..\\..\\..\\res\\thehead.raw", "rb");
if (f == NULL)
printf("FAIL!!");
因为我需要使用相对路径,所以我认为如下: .. \到父目录。
所以“.. \ .. \ .. \”应该让我进入文件夹“D:\ uni \ c ++ \ ex5 \”。
\ res应该打开res res。
不用说它失败了,我不明白为什么。 任何帮助将不胜感激。
答案 0 :(得分:4)
相对路径相对于当前工作目录,而不是可执行文件的路径。当前工作目录是启动程序的目录。
要计算相对于可执行文件位置的路径,最简单的选项是以argv[0]
的形式访问可执行文件,将目录解压缩到其中chdir()
。
答案 1 :(得分:2)
@Käptn对代码进行了一些修改,由于遇到了一些警告,我发现以下情况有效,虽然我使用的是C驱动器而不是D驱动器,因为我的系统没有D驱动器。实际上,以下代码的工作方式相同,我的系统将添加“已打开文件”消息。无论是通过调试器运行还是直接从Debug文件夹中的可执行文件执行,我发现它的工作原理相同。
路径
Here is my .exe file C:\uni\c++\ex5\msvc2013\ex5\Debug
Here is the file i want to read C:\uni\c++\ex5\res\thehead.raw
源代码
#include <iostream>
int main (int argc, char ** argv)
{
FILE* f;
fopen_s(&f, "..\\..\\..\\res\\thehead.raw", "rb");
if (f == NULL)
{
printf("FAIL!!");
}
else
{
printf("File opened.");
}
return 0;
}