我必须做一个简单的任务。我必须打开一个目录中的文件。我在src中有.c文件,当我编译时,我将程序(a.out)移动到bin目录中。我想读取目录资产中的文件。所有这些文件夹都在主文件夹中。
如果我这样做
FILE* fp = fopen("../asset/team_list", "r");
它不会打开文件。为什么我不能打开该目录中的文件?
答案 0 :(得分:0)
猜你忘了放文件的扩展名
FILE* fp = fopen("../asset/team_list.doc", "r");
答案 1 :(得分:0)
使用perror /显式提及错误消息查找您获得的错误,并期望stackoverflow可能的回复。
答案 2 :(得分:0)
相对路径相对于进程的当前工作目录,该目录可能与二进制文件的位置不同。因此,如果您在/home/user/
并且运行./project/bins/my.exe
,那么您当前的工作目录为/home/user/
,相对路径需要相对于该位置。
您可以尝试一些方法来帮助解决此问题。首先,在打开失败后,您可以检查errno
以查看打开失败的原因,是权限,无效路径?
或者您可以访问strace程序,这可以跟踪系统调用,例如应用程序中的open
,并允许您查看失败的系统调用。试试strace ./project/bins/my.exe
,你会看到很多输出,挖掘这个寻找失败的开放调用,并试图找出失败的原因,同样errno
将包含在跟踪中帮助理解失败。
最后,您可以向程序添加对getcwd
的调用并打印结果(作为调试帮助),这会将当前工作目录放入缓冲区,如下所示:
char buffer [PATH_MAX + 1];
getcwd (buffer, PATH_MAX + 1);
printf (buffer);