由于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。感谢。
答案 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()
函数的完整路径?