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

由于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。

谢谢。

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

 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 /tmp/../doc/my_file.txt /doc/my_file.txt /tmp/../doc/my_file.txt (或/doc/my_file.txt )可能不存在。

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

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

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

您可能希望查看目录遍历的直接例程系列。

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

你能否传递给fopen()函数的完整路径?