2010-05-27 96 views
0

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

谢谢。

回答

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等

+0

我需要使用相对路径。我有conf文件夹中的文件,并尝试过FILE * fp = fopen(“/ conf/config.txt”,“r”),但没有奏效。 – nunos 2010-05-27 21:55:49

+2

@nunos:这不是一个相对路径。相对路径以'。。'表示当前工作目录,或'..'开始,表示当前工作目录*之上的目录*。也就是说,如果你在'/ tmp/foo'中,那么'.'指的是'/ tmp/foo',而'..'指的是'/ tmp'。然后'./bar.txt'会显示'/ tmp/foo/bar.txt'。 – 2010-05-27 21:58:14

+0

我正在windows中工作。这是否也适用于Windows? – nunos 2010-05-27 22:01:04

0

你“可能想要查看用于目录遍历的dirent例程系列。

0

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

你不能通过fopen()函数的完整路径吗?

相关问题