在另一个目录中打开文件

时间:2014-06-10 09:44:07

标签: c file

我必须做一个简单的任务。我必须打开一个目录中的文件。我在src中有.c文件,当我编译时,我将程序(a.out)移动到bin目录中。我想读取目录资产中的文件。所有这些文件夹都在主文件夹中。

如果我这样做

FILE* fp = fopen("../asset/team_list", "r");

它不会打开文件。为什么我不能打开该目录中的文件?

3 个答案:

答案 0 :(得分:0)

猜你忘了放文件的扩展名

FILE* fp = fopen("../asset/team_list.doc", "r");

答案 1 :(得分:0)

使用perror /显式提及错误消息查找您获得的错误,并期望stackoverflow可能的回复。

  • 确保从正在执行程序的PWD指出文件所在的正确目录。

答案 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);