1

我是 C 新手,并尝试使用 fopen 命令读取文件,如下所示:

 FILE *f = fopen (argv[1], "rb" );

         if(!f)
        {
            printf("ERROR! Unable to open file \n");
            fclose(f);
            return 1;
        }

我试图读取的文件是“somefile.dat”

当我运行它时,我在控制台中得到以下信息

  ERROR! Unable to open file 

所以 f 为空,但我该如何调试呢?我的意思是我从哪里开始寻找问题?

谢谢


更新:

我尝试了下面的各种建议,发现问题是它找不到文件。

我使用 XCode 运行程序,而 XCode 在与放置文件的位置不同的目录中运行可执行文件,因此无法找到文件。我给了它一条艰难的道路,它奏效了。

现在的问题是如何为 XCode 提供正确的文件路径?XCode 在哪里运行可执行文件?

4

3 回答 3

3

这是您应该做的调试:

  • 添加printf以查看里面的内容argv[1]
  • 确保打印的值与预期的文件名匹配;如有必要,更改命令行以查找绝对路径,即~myuser/somefile.datc:\myproject\somefile.dat而不是somefile.dat
  • 检查当前目录中是否存在具有该名称的文件
  • 检查运行程序的用户(通常是您的用户)是否具有读取文件的访问权限。
于 2013-03-24T16:04:15.047 回答
2
  • 首先,硬编码你的文件名。如果问题消失了,那么问题出在您使用 argv 上。

  • 其次,确保文件存在。尝试在您的资源管理器中打开它。也许它以某种方式被锁定。

  • Thirs,使用perror来获得更具描述性的错误。

希望你能找到这些问题。

于 2013-03-24T16:04:02.710 回答
1

我可以想到以下可能的原因

1) 路径不正确

2) 文件 somefile.dat 的权限不正确,因此 fopen 失败

您可以使用 errno 来检查产生了什么问题。

http://www.cplusplus.com/reference/cstdio/fopen/

http://www.cplusplus.com/reference/cerrno/errno/

于 2013-03-24T16:05:07.713 回答