fopen()返回一个NULL指针,但该文件肯定存在
我的代码如下:
FILE *txt_file = fopen("data.txt", "r"); if (txt_file == NULL) { perror("Can't open file"); }
返回的错误消息是:
无法打开文件:没有这样的文件或目录
文件’data.txt’肯定存在于工作目录中(它存在于包含我的.c和.h文件的目录中),那么为什么fopen()返回一个NULL指针?
文件名是否可能不是“data.txt”?
在Unix上,文件名实际上是字节字符串而不是字符串,并且可以在名称中创建带有控件(如退格)的文件。 我已经看到过去复制粘贴到终端导致文件具有普通名称的情况,但是尝试打开目录列表中出现的文件名会导致错误。
一种方法可以确定文件名确实是您认为的文件名:
$ python >>> import os >>> os.listdir('.')
标准问题。 尝试
FILE *txt_file = fopen("C:\\SomeFolder\\data.txt", "r");
即尝试先用完整的绝对路径打开它; 如果它工作,那么你只需要弄清楚_getcwd()
当前目录是什么,然后修复你的相对路径。
确保输入文件与可执行文件位于同一目录中,该目录可能与保存源文件的目录不同。 如果您在IDE调试器中运行该程序,请确保将您的工作目录设置为输入文件的位置。 此外,如果您在* nix而不是Windows中运行,则可能需要在输入文件名前加上“./”。
文件名中有不可见的SPACE字符?
一年一次,我遇到了类似的问题:我尝试打开一个文件名的文件,从一个sting操作获得。 当我打印名称似乎没问题,但fopen()返回一个空指针。 唯一的帮助是使用分隔符打印名称,显示文件名字符串的确切开头和结尾。 当然,这对不可打印的字符没有帮助。
我的问题是我有一个文件filename.txt,我没有意识到实际上它是filename.txt.txt,因为Windows没有显示扩展名。
我刚才有类似的问题,我知道路径是正确的,文件位于正确的位置。 检查文件权限。 程序可能无法访问该文件,因为它正在获得权限被拒绝。