fopen()返回一个NULL指针,但该文件肯定存在

Bar*_*vel 18 c null fopen pointers visual-studio-2008

我的代码如下:

FILE *txt_file = fopen("data.txt", "r");
if (txt_file == NULL) {
    perror("Can't open file");
} 
Run Code Online (Sandbox Code Playgroud)

返回的错误消息是:

无法打开文件:没有这样的文件或目录

文件"的data.txt"肯定存在于工作目录(它存在于包含我的.c和.h文件的目录),所以为什么fopen()函数返回一个空指针?

Jac*_*cob 13

标准问题.尝试

FILE *txt_file = fopen("C:\\SomeFolder\\data.txt", "r");
Run Code Online (Sandbox Code Playgroud)

即尝试先用完整的绝对路径打开它; 如果它工作,那么你只需要弄清楚当前目录是什么_getcwd(),然后修复你的相对路径.


wbe*_*rry 9

文件名是否可能不是"data.txt"?

在Unix上,文件名实际上是字节字符串而不是字符串,并且可以在名称中创建带有控件(如退格)的文件.我已经看到在过去的案件中,复制粘贴到终端导致与普通外观的名称的文件,但试图打开出现在目录列表中导致错误的文件名.

一种方法可以确定文件名确实是您认为的文件名:

$ python
>>> import os
>>> os.listdir('.')
Run Code Online (Sandbox Code Playgroud)

  • 你的意思是文件名可以是"data.txt",文件扩展名为".txt"吗?这意味着文件全名可以是'data.txt.txt'? (4认同)
  • 事实证明是这样的. (3认同)

小智 5

我的问题是我有一个文件 filename.txt,但我没有意识到实际上它是 filename.txt.txt,因为 Windows 没有显示扩展名。