fopen
始终尝试从工作路径加载文件。为了重现该错误,我编写了下面的演示代码:
#include<stdio.h>
int main(void) {
FILE* my_file = NULL;
const char* file_name = "some_file.dat";
errno_t errcode = fopen_s(&my_file, file_name, "rb");
if (errcode != 0) {
printf("Cannot open the file `%s`. Error code = %d", file_name, errcode);
}
else {
puts("Success!!");
}
return errcode;
}
d:\path1\some_file.dat
和一个目录d:\path2
。然后我将上面的代码编译为名为 D:\path1\myprogram.exe
.cd d:\path1
myprogram
程序会打印“成功!!”。cd d:\path2
..\path1\myprogram
程序将打印“无法打开文件some_file.dat
。错误代码 = 2”。我的问题是无论我从哪里运行程序,如何成功打开文件。
fopen
可以采用完整的、绝对的文件路径,或者,如果它获得不完整的路径,则必须假设该路径是相对;相对路径始终相对于当前工作目录。
您可以像这样指定完整路径:
// ....
const char* file_name = "D:\\path2\\some_file.dat";
或从命令行读取文件的路径。