繁体   English   中英

Fopen - C 中没有这样的文件或目录

[英]Fopen - No such file or directory in C

此代码没有正确打开文件,它没有返回这样的文件或目录,尽管路径和权限在那里并且没有其他程序正在使用该文件。 如何修复错误? 我尝试交换路径并移动文件,错误仍然存在。

    char string[105];
    FILE* file = fopen("C:\\Users\\Public\\Documents\\a.txt", "r");
    while (fgets(string, 100, file)) {
        printf("%s", string);
    }

打开一个简单的文件可能会非常棘手。 很多事情都可以 go 出错,我建议编写稍微冗长的代码:像这样:

#include <string.h>
#include <errno.h>

char* filename = "C:\\Users\\Public\\Documents\\a.txt";
char string[105];
FILE* file = fopen(filename, "r");
if (file == NULL) {
    fprintf(stderr, "can't open %s: %s\n", filename, strerror(errno));
    exit(1);
}
while (fgets(string, 100, file)) {
    printf("%s", string);
}

关键是错误消息会打印出它尝试打开但未能打开的文件的名称,以及它无法打开它的实际原因。 (此外,通过将文件名存储在变量中,您可以绝对确定它在错误消息中打印的文件名是它尝试但无法打开的文件名。)听起来您已经知道错误是“没有这样的文件或目录”,但我不确定你是怎么知道的。

虽然我在C编程很久了,有时候还是会遇到这个问题。 我有时会做的一件事是使用鼠标复制错误消息中打印的确切文件名字符串,程序说它无法打开的文件,我确定文件确实存在,然后将其粘贴到终端window(或 CMD 或 Powershell,如果您在 Windows 上),以及目录列表命令,以查看操作系统是否可以实际看到该文件。 也就是说,对于您的示例,我运行的命令是

dir C:\Users\Public\Documents\a.txt

但关键是我实际上不会输入路径名“ C:\Users\Public\Documents\a.txt ”,而是将其复制并粘贴到程序打印的错误消息中。 有时,您认为它试图打开的文件名与它实际上试图打开的文件名之间存在令人惊讶的几乎不可能发现的差异,这个练习是让计算机帮助您找到这些差异的好方法。

还要记住,如果目录中没有该名称的文件,或者该目录根本不存在,您将收到错误“没有这样的文件或目录”。 例如,如果您尝试打开路径

C:\Users\Public\Documents\a.txt

并且文件a.txt一直不存在,并且您继续检查您的主目录

C:\Users\Donkey\Documents

而且您不断看到该文件那里,因此很容易忽略真正的问题是什么。 :-)


附录:您可能会遇到不同的 Unix/Linux 与 Windows 文件路径分隔符的问题,即/\ 通常,在 Windows 机器上,使用\是最安全的,就像您所做的那样。 (一个非常常见的错误是忘记将反斜杠加倍,但看起来你做对了。)根据你的编程环境,如果有一定程度的 Unix 仿真正在进行,你有时可以使用 Unix 风格的/ ,它会自动为你翻译成\ 我从来没有听说过使用\使它不起作用的情况(这是在评论中探讨的一种可能性),但你可以尝试一下,也许尝试

char* filename = "/c/Users/Public/Documents/a.txt";

或(不太可能)

char* filename = "C:/Users/Public/Documents/a.txt";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM