2011-12-26 63 views
4

我有下面的代碼,我試圖打開一個文本文件的原因。什麼是的fopen未能打開文件

char frd[32]="word-list.txt"; 
    FILE *rd=fopen(frd,"rb"); 
    if(!rd) 
     std::cout<<"Coudn't open file\t"<<frd; 

我使用的是vc 2010,該文件位於此項目的調試目錄中。 誰能告訴我爲什麼它無法打開文件?

+0

什麼文檔說對哥本哈根會議失敗的類型?應該有一些方法來找出答案。 – xaxxon 2011-12-26 07:56:11

+0

文件是否存在(在執行路徑中)? – 2011-12-26 07:58:34

+0

檢查文件和/或包含目錄的權限。 – prongs 2011-12-26 07:59:42

回答

6
#include<stdio.h> 
#include <errno.h> 

int main() 
{ 
errno = 0; 
FILE *fb = fopen("/home/jeegar/filename","r"); 
if(fb==NULL) 
    printf("its null"); 
else 
    printf("working"); 


printf("Error %d \n", errno); 


} 

這樣,如果FOPEN得到失敗,那麼將設​​置錯誤編號,你可以在這裏找到這些錯誤號碼列表http://pubs.opengroup.org/onlinepubs/009695399/functions/fopen.html

+0

問題不在於打開文件。 'if(rd)'被評估爲真,因此消息行被執行。我應該用「如果(RD = NULL)」如果fopen()函數獲取失敗了, – John 2011-12-26 08:12:01

+0

它會返回NULL所以RD將是NULL現在在你的代碼已經編寫如果(!RD)不是如果(RD)意味着它將被執行時,rd將爲NULL,如果文件打開成功,那麼該消息將永遠不會打印..如果你想使用==,那麼你應該寫if(rd == NULL)noy if(rd = NULL) – 2011-12-26 08:17:23

+1

是啊,你是對的。它是輸入錯誤 – John 2011-12-26 08:31:08

0

r Open for reading (existing file only) and rb Open for reading (existing file only) in binary mode。確保你的工作目錄中有該文件。

+0

我100%確定(據我所知)我有工作目錄中的文件。另外我試圖打開它沒有二進制模式,結果是一樣的。 – John 2011-12-26 07:59:43

1

看其在一個錯誤的情況下設置的errno變量。這是一個全球變量。已經有一段時間了,但可能包含errno.h,它會給你定義。

1

你可以做man fopen - 它說Upon successful completion fopen() return a FILE pointer. Otherwise, NULL is returned and errno is set to indicate the error

請檢查在執行路徑或在你的程序中是否存在該文件,檢查errno

相關問題