FILE *txt_file = fopen("data.txt", "r");
if (txt_file == NULL) {
perror("Can't open file");
}
返回的错误信息是:
文件"data.txt"确实存在于工作目录中(它存在于包含我的.c和.h文件的目录中),那么为什么fopen()返回一个空指针呢?无法打开文件:没有那个文件或目录
FILE *txt_file = fopen("data.txt", "r");
if (txt_file == NULL) {
perror("Can't open file");
}
文件"data.txt"确实存在于工作目录中(它存在于包含我的.c和.h文件的目录中),那么为什么fopen()返回一个空指针呢?无法打开文件:没有那个文件或目录
标准问题。尝试
FILE *txt_file = fopen("C:\\SomeFolder\\data.txt", "r");
也就是说,首先尝试使用完整的绝对路径打开它;如果可以运行,则只需使用 _getcwd()
找出当前目录,然后修复相对路径即可。
文件名真的可能不是"data.txt"吗?
在Unix上,文件名实际上是字节字符串而不是字符字符串,因此可以创建具有控制字符(例如退格符)的文件名。过去我曾见过这样的情况,即将内容复制并粘贴到终端中导致出现看起来很普通的文件名,但尝试打开目录清单中显示的文件名会导致错误。
要确定文件名是否真的是您认为的名称之一的一种方法是:
$ python
>>> import os
>>> os.listdir('.')
我的问题在于我有一个文件filename.txt,但由于Windows系统不显示扩展名,我没有意识到它其实是filename.txt.txt。
请确保您的输入文件与可执行文件在同一目录下,这可能与存放源文件的目录不同。如果您在IDE调试器中运行程序,请确保工作目录设置为输入文件的位置。此外,如果您在*nix而不是Windows上运行,则可能需要在输入文件名前加上"./"。
fopen()
的文件名前面不需要加./
。 - caf文件名中的不可见空格字符?
每年我都会遇到类似的问题:我尝试使用从字符串操作获得的文件名字符串打开文件。当我打印文件名时,它看起来没问题,但是fopen()返回一个空指针。唯一有用的方法是使用分隔符打印文件名,显示文件名字符串的确切开头和结尾。当然,这对于不可打印字符并没有帮助。
我之前遇到过类似的问题,我知道路径是正确的,文件也在正确的位置。请检查文件权限。可能是程序无法访问该文件,因为它被拒绝了许可。
我在Linux上遇到了与脚本文件损坏有关的fopen相同的errno。
ENOENT 2 没有这样的文件或目录
Windows上的Wordpad(或其他一些微软罪犯)将CRLF =(0x0D,0x0A)插入我的Linux脚本文件中,以代替换行符= LF = 0x0A。当我将文件名读入缓冲区并调用fopen时,由于不可见的附加CR字符而失败。
在Linux Mint的Codelite编辑器中,我能够显示EOL字符(查看>显示EOL),并使用从损坏的脚本文件中复制和粘贴的CRLF和未损坏文件中的LF,通过查找和替换来删除它们。
ls -Fal
命令的输出结果? - Fredrik Pihl