假设条件
假设我有如下文件
C:\folder\file.dat
我的代码
#include <stdio.h>
int main(void)
{
FILE *f = fopen("file.dat", "rb");
if (f == NULL)
{
puts("ERROR: Cannot open the file");
return -1;
}
puts("File reader is OK");
return 0;
}
遇到的问题
我将上面的代码编译成这个程序:
C:\folder\filereader.exe
fopen() 函数是以进程的工作目录为相对路径进行文件的读写,而不是进程自身的目录。
- 若我在终端中将工作目录设置为 "C:\folder" ,运行
filereader
,可以成功访问该文件,并打印"File reader is OK"。 - 若我换一个工作目录(比如 "C:\folder2"),运行
..\folder\filereader
后,fopen() 函数无法访问该文件,并打印"ERROR: Cannot open the file",因为程序试图从 "C:\folder2" 目录下搜索 "file.dat",但是搜索不到。
期望的运行结果
无论我从哪里启动这个程序,都可以以程序自身所在的目录作为相对路径访问到文件。
寻求帮助
我在做跨平台开发,所以不希望调用Windows API,尽量使用C标准库或者一些开源的库来实现此功能。
大家可能会想到 getcwd() 函数,但是它获取的是工作目录,而不是进程自身的目录。