0

我正在使用 C 打开一个文件进行阅读。我有这个代码:

fp = fopen("./settings.cfg","r");
if (fp != NULL)
    printf("OK");
else
    printf("ERROR");

但我总是得到一个错误。

该文件位于可执行文件所在的文件夹中。我试过只写“settings.cfg”。可能是什么问题?

4

4 回答 4

6

试着perror()让图书馆本身告诉你什么是错的,如果有的话。

fp = fopen("./settings.cfg", "r");
if (fp != NULL)
    printf("OK\n");
else perror("fopen");
于 2012-07-03T12:05:55.950 回答
3

您正在“当前目录”中打开文件,而不是“在可执行文件所在的文件夹中”。

事实上,unix 没有简单的方法来找到那个特定的文件夹。在 Linux 中,您可以 readlink() /proc/[your pid]/exe 链接来查找可执行文件并删除文件名部分——这在许多情况下都可以使用,但也有一些像硬链接这样的边缘情况会导致它失败.

于 2012-07-03T12:05:45.323 回答
1

您从哪个目录运行程序?它不会将它所在的目录作为当前目录,它将从环境中继承。

也可能是权利,即文件归其他人所有,而您没有读取权限。

还要仔细检查文件名。这听起来很明显,但无论如何都要这样做。

于 2012-07-03T12:03:27.897 回答
0

如果您尝试打开的文件与您的 C 编译文件位于同一目录中,您必须简单地执行

fp = fopen("settings.cfg","r");
if (fp != NULL)
  printf("OK");
else
  printf("ERROR");

文件名中没有最初的“./”

于 2012-07-03T14:12:52.617 回答