C ++ fopen relative path

时间:2014-07-06 14:42:23

标签: c++ windows

我读了一些关于相对路径的话题,但我仍然错了。 我希望某人可以帮助我:)。 我正在使用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。

不用说它失败了,我不明白为什么。 任何帮助将不胜感激。

2 个答案:

答案 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;
}