我正在使用 C 打开一个文件进行阅读。我有这个代码:
fp = fopen("./settings.cfg","r");
if (fp != NULL)
printf("OK");
else
printf("ERROR");
但我总是得到一个错误。
该文件位于可执行文件所在的文件夹中。我试过只写“settings.cfg”。可能是什么问题?
试着perror()
让图书馆本身告诉你什么是错的,如果有的话。
fp = fopen("./settings.cfg", "r");
if (fp != NULL)
printf("OK\n");
else perror("fopen");
您正在“当前目录”中打开文件,而不是“在可执行文件所在的文件夹中”。
事实上,unix 没有简单的方法来找到那个特定的文件夹。在 Linux 中,您可以 readlink() /proc/[your pid]/exe 链接来查找可执行文件并删除文件名部分——这在许多情况下都可以使用,但也有一些像硬链接这样的边缘情况会导致它失败.
您从哪个目录运行程序?它不会将它所在的目录作为当前目录,它将从环境中继承。
也可能是权利,即文件归其他人所有,而您没有读取权限。
还要仔细检查文件名。这听起来很明显,但无论如何都要这样做。
如果您尝试打开的文件与您的 C 编译文件位于同一目录中,您必须简单地执行
fp = fopen("settings.cfg","r");
if (fp != NULL)
printf("OK");
else
printf("ERROR");
文件名中没有最初的“./”