如何打开不在同一文件夹中的文本文件?
由于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()
函数的完整路径?