无论我从何处运行程序,如何打开文件(不从工作目录加载)?

问题描述 投票:0回答:1

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;
}
  1. 我有一个文件
    d:\path1\some_file.dat
    和一个目录
    d:\path2
    。然后我将上面的代码编译为名为
    D:\path1\myprogram.exe
    .
  2. 的程序
  3. 输入命令
    cd d:\path1
    myprogram
    
    程序会打印“成功!!”。
  4. 输入命令
    cd d:\path2
    ..\path1\myprogram
    
    程序将打印“无法打开文件
    some_file.dat
    。错误代码 = 2”。

我的问题是无论我从哪里运行程序,如何成功打开文件。

c gcc fopen
1个回答
0
投票

fopen
可以采用完整的、绝对的文件路径,或者,如果它获得不完整的路径,则必须假设该路径是相对;相对路径始终相对于当前工作目录。

您可以像这样指定完整路径:

    // ....
    const char* file_name = "D:\\path2\\some_file.dat";

或从命令行读取文件的路径。

© www.soinside.com 2019 - 2024. All rights reserved.