什么是的fopen未能打开文件

问题描述:

我有下面的代码,我试图打开一个文本文件的原因。什么是的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

#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

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

看其在一个错误的情况下设置的errno变量。这是一个全球变量。已经有一段时间了,但可能包含errno.h,它会给你定义。

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

请检查在执行路径或在你的程序中是否存在该文件,检查errno