0

在C语言中,我用fopen()函数能通过相对路径打开文件
比如

//假设我当前目录有个文件叫 1.txt

FILE *fp = fopen("1.txt","r");

if( fp != NULL ){
    //一番操作...
}else{
    //报错
}

fclose(fp);

然后我在设置了环境变量的path后,把这个程序编译好,连同这个1.txt都放到那个设置好的路径下。

这时候,我在命令行终端的任何地方输入这个可执行程序的名字都能运行它了,可是它并不能正确的打开通过相对路径形式定义的这个文件。

所以,请问要通过怎样的方式才能达到这个目的(通过相对路径形式打开文件,并且能在通过设置环境变量后在任何地方通过相对路径形式打开文件)呢?

2018-01-09 提问
2 个回答
1

不知道你是什么操作系统

如果是 BSD 的话,realpath 应该可以满足需求的;
如果是 Linux 的话,可以使用全局变量 extern char *program_invocation_name 来获取;当然也可以读取 /proc/[pid]/exe 的链接指向来获取

1

在windows下用 GetModuleFileName 可以获得程序的绝对路径。

搜索PATH环境变量找可执行程序是shell和系统帮你干的,但是非可执行文件呢,没人帮你干这个活儿,你得自己来。
所以剩下的就是,要么你拼接出文件的绝对路径,要么你自己获取PATH然后自己挨个儿搜索。比较下,你肯定拼接路径吧。

撰写答案

推广链接