2010-05-27 29 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()函數的完整路徑嗎?

相關問題