如何打开不在同一文件夹中的文本文件?

时间:2010-05-27 21:49:53

标签: c file io

由于C不是我习惯编程的语言,我不知道该怎么做。

我有一个项目文件夹,其中包含所有.c和.h文件以及一个conf文件夹,其中有一个config.txt文件可供阅读。我怎么能打开它?

FILE* fp = fopen("/conf/config.txt", "r");

if (fp != NULL)
{
    //do stuff
}

else
   printf("couldn't open file\n");

我一直收到错误消息。为什么呢?

不过,这只需要在windows上工作,而不是linux。

感谢。

3 个答案:

答案 0 :(得分:6)

简单的方法是使用绝对路径......

my_file = fopen("/path/to/my/file.txt", "r");

或者您可以使用相对路径。如果您的可执行文件位于/home/me/bin且您的txt文件位于/home/me/doc,那么您的相对路径可能类似于

my_file = fopen("../doc/my_file.txt", "r");

在相对路径中要记住的重要一点是,在运行可执行文件时,它与当前工作目录相关。因此,如果您使用了上述相对路径,但是您在/tmp目录中并且运行了/home/me/bin/myprog,那么它会尝试打开/tmp/../doc/my_file.txt(或/doc/my_file.txt)不存在。

更健壮的选项是将文件的路径作为程序的参数,并将其作为第一个参数传递给fopen。最简单的例子是从argv[1]的参数中使用main,即

int main(int argc, char **argv)
{
    FILE *my_file = fopen(argv[1], "r");
    /* ... */
    return 0;
}

当然,您需要进行错误检查以验证argc> 2,等等。

答案 1 :(得分:0)

您可能希望查看dirent例程系列以进行目录遍历。

答案 2 :(得分:0)

.c.h文件的位置并不是真正的问题;当您运行可执行文件时,问题是当前的工作目录。

您是否可以传递fopen()函数的完整路径?