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:SomeFolderdata.txt", "r");

也就是说,尝试先用完全绝对路径打开它; 如果它工作,那么你只需要找出_getcwd()当前目录是什么,然后修复你的相对路径。


确保您的输入文件与可执行文件位于同一目录中,这可能与保存源文件的文件不同。 如果您在IDE调试器中运行该程序,请确保您的工作目录设置为输入文件的位置。 另外,如果您使用* nix而不是Windows来运行,则可能需要在输入文件名前添加“./”。

链接地址: http://www.djcxy.com/p/54561.html

上一篇: fopen() returning a NULL pointer, but the file definitely exists

下一篇: problem with flushing input stream C