2017-01-30 38 views
2

我有這樣的代碼非常簡單:C - 爲什麼fopen不起作用?

#include <stdio.h> 
#include <stdlib.h> 

int main (void) 
    { 
    FILE * file_ptr = NULL; 

    file_ptr = fopen ("file.txt", "r"); 

    if (file_ptr == NULL) 
     { 
     puts ("Error!"); 
     return EXIT_FAILURE; 
     } 
    else 
     { 
     puts ("O.k.!"); 
     } 

    return EXIT_SUCCESS; 
    } 

輸出:

Error! 

FOPEN爲什麼不起作用?該文件未受保護,未在其他位置打開,並與該程序的* .exe存儲在相同的文件夾中。我也試着給它指定文件的完整路徑和一個存儲文件名的數組。每次它發出「錯誤!」。

這是怎麼回事?

我正在使用Eclipse Neon.2版本(4.6.2)與Windows 10 64bit上的最新cygwin gcc編譯器。

謝謝你的幫助!

+3

爲什麼不檢查'errno'是因爲*原因*'fopen()'失敗? – EOF

+2

您也可以嘗試'fopen(「xxyyzzqq.txt」,「w」)',然後搜索硬盤以查看文件的創建位置。 – user3386109

+2

@ user3386109:好主意!事實證明,我的新Eclipse安裝需要src-directory中的文件,而不是在debug目錄(* exe文件所在的位置),我的舊安裝需要它。非常感謝!這花了我整整一天...我是一個初學者。 –

回答

2

這個問題是通過改變fopen

file_ptr = fopen("xxyyzzqq.txt", "w"); 

,然後搜索硬盤,看文件的創建,其中解決。

原來,該文件是在項目源目錄中創建的,而不是調試目錄(其中是.exe文件所在的目錄),與將debug目錄用作工作目錄的舊安裝不同。

1

perror可能會有所幫助。

FILE *file_ptr = fopen("file.txt", "r"); 
if (!file_ptr) { 
    perror("fopen"); 
} else { 
    printf("It's working!"); 
} 

類似的問題:fopen() not working in C

+0

謝謝,您的代碼顯示:「fopen:沒有這樣的文件或目錄」。我嘗試了一遍,提供了文件的完整路徑,並意識到,我必須使用「\\」而不是「\」(「P:\\ Office \\ Eclipse C(++)\\ workspace \ \測試\\ \\調試file.txt的「)。然後Eclipse找到該文件。但是,當文件與程序位於同一文件夾中時,它也應該沒有路徑,但它不會。這是一個問題,因爲我必須編寫一個程序,以便用戶可以用fgets()輸入文件名。當需要鍵入完整路徑時,這不是一個好的解決方案。 –

+0

Eclipse可能在與您放置輸入文件的位置不同的工作目錄中運行該程序。 –

+0

感謝用戶「user3386109」,問題解決了,但我也感謝你的幫助,David。 –