我一直试图让这段代码工作几个小时!我需要做的就是打开一个文件,看看它是否真实且可读。我是 C 的新手,所以我确定我缺少一些愚蠢的东西。这是代码(速记,但已复制):
#include <stdio.h>
main() {
char fpath[200];
char file = "/test/file.this";
sprintf(fpath,"~cs4352/projects/proj0%s",file);
FILE *fp = fopen(fpath,"r");
if(fp==NULL) {
printf("There is no file on the server");
exit(1);
}
fclose(fp);
//do more stuff
}
我还验证了路径是否正确指定了我具有读取权限的真实文件。还有其他想法吗?
编辑 1:我知道 fpath 以“~cs4352/projects/proj0/test/file.this”结尾
编辑2:我也尝试过使用绝对文件路径。在这两种情况下,我都可以通过 ls 验证路径是否正确构建。
编辑 3:有errno
2...我目前正在尝试跟踪这在谷歌中的含义。
编辑 4: 好的,errno
其中 2 是“没有这样的文件或目录”。当 fopen 中的参考路径是“/home/courses1/cs4352/projects/proj0/index.html”时,我得到了这个,我验证它确实存在并且我拥有它的阅读权限。至于下面列出的 C 代码,其中可能存在一些语义/新手错误,但 gcc 没有给我任何编译时警告,并且代码完全按照它应该的方式工作,只是它说它一直errno
在吐 2。换句话说,我知道所有的字符串/字符数组都正常工作,但唯一可能成为问题的是fopen()
调用。
解决方案: 好的,access() 过程对我帮助最大(我仍在使用它,因为它的代码更少,更不用说更优雅的方式了)。问题实际上来自于我没有向大家解释过的东西(因为直到我使用 access() 才看到它)。为了导出文件,我使用 strtok() 拆分字符串并且只在“\n”上拆分,但因为这是一个 UNIX 系统,我还需要在其中添加“\r”。一旦我解决了这个问题,一切就都到位了,我确信 fopen() 函数也能正常工作,但我还没有测试过。
感谢大家的有益建议,尤其感谢 Paul Beckingham 找到了这个绝妙的解决方案。
干杯!