2013-07-28 50 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

相关问题