2013-07-28 47 views
0

下面是代碼:的fopen回報沒有這樣的文件或目錄,文件存在

FILE* json = fopen("D:\\platformer\\resources\\maps\\test.json", "r"); 
if (json == 0) 
{ 
    // No such file or directory 
    String aa = strerror(errno); 
} 

它總是返回No such file or directory,但它的存在:

enter image description here

+1

您有權限閱讀嗎?它是否被另一個鎖定它的進程打開? – tohava

+0

是的,它有權限閱讀,並且不會被任何人打開。我用記事本創建了它,並嘗試關閉記事本 – Pacha

+0

你的測試應該是'if(json == 0)',或者更好'if(json == NULL)'。什麼是「字符串」?除非你自己定義它,否則C中沒有這種類型。請向我們展示您實際編譯和執行的真實代碼。 –

回答

3

的代碼,你已經證明沒有按實際上證明fopen失敗。它可能已經成功了,並且errno剛剛發生了一些與之前發生的相關的殘餘錯誤。在您發現json爲空後,您應該只查看errno

+0

做到了,json爲null。這就是爲什麼我使用errno和strerror – Pacha

1

json是成功的開放

if (json == NULL) // or 0 
     printf ("Error opening file: %s\n",strerror(errno)); 

所以非零,

//clean errno 
errno = 0; 
FILE* json = fopen("D:\\platformer\\resources\\maps\\test.json", "r"); 
if (json == 0) <-- Fix 
{ 
     String aa = strerror(errno); 
} 
+0

這是舊的代碼複製/粘貼。我已經修好了。 – Pacha

+0

@Pacha clean'errno' first then – P0W

1

使用C++的類,而不是解決它。

ifstream myfile; 
myfile.open("D:\\platformer\\resources\\maps\\test.json"); 
if (myfile.is_open()) 
{ 
    // parsing. now it works. 
} 
+0

它應該使用fopen。爲什麼不呢?不知道。無論如何,恭喜您解決您的問題。 –

+0

我知道這真的很奇怪。可能它與我正在使用的庫有關 – Pacha

相關問題