博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux上使用程序相对路径访问文件【转】
阅读量:7080 次
发布时间:2019-06-28

本文共 1289 字,大约阅读时间需要 4 分钟。

转自:

今天一个朋友问我这个问题,说为什么在Windows上跑得很好的应用程序,移植到Linux上后就读不到跟应用程序在同一文件夹下的文件呢,我说,这是linux和Windows在Work directory上设置的不同。大家都知道,对于Windows而言,应用程序的默认工作目录就是应用程序所在的目录,它一般是不管应用程序是从哪个目录上下文启动的。那么在不更改工作目录的情况下,读文件使用相对目录就肯定是相于应用程序所在的目录。但对于Linux而言,应用程序的默认工作目录就不同了,它是默认是继承启动它的进程的工作目录的,也就是说,如果进程是在其它目录下启动,那应用程序的工作目录默认就在其它的目录下。这样的话使用相对路径访问文件就有很大的不确定性:我们永远也不能保证,用户一定是从应用程序所在的目录启动!那要怎么解决呢,我给的建议是,在程序启动后,修改应用程序的当前目录到应用程序所在的目录,然后其它所有程序都无须改动。最好的办法当然只有一个,那就是通过main函数传入的argv[0]计算出当前目录。下面的例子是读取跟应用程序所在同一目录的a.txt文件并显示,程序启动后修改当前工作目录为应用程序所在的目录,所以不管应用程序从哪个目录启动,程序都能正确地读到a.txt这个文件。01#include 
02#include
03#include
04#include
05 06void main(int argc,char* argv[]){07 char buf[256];08 chdir(dirname(argv[0])); //设置当前目录为应用程序所在的目录。其实,就只要加入这一句,就可以使用windows一样的方式用相对路径打开文件了!09 FILE* fp=fopen("./a.txt","r");10 if(fp==NULL){11 printf("Can't read file ./a.txt\n");12 return;13 }14 fread(buf,255,1,fp);15 fclose(fp);16 printf("%s\n",buf);17}在shell中同样可以保证使用相对路径,同样的,$0参数是调用命令,使用`dirname $0`,可取得shell脚本的真实路径.cd到这个路径后也可以使用相对路径了.

 

【作者】
【出处】
【博客园】
【新浪博客】
【知乎】
【我的作品---旋转倒立摆】
【我的作品---自平衡自动循迹车】
【新浪微博】 张昺华--sky
【twitter】 @sky2030_
【facebook】 张昺华 zhangbinghua
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
你可能感兴趣的文章