为什么我无法访问 C 中的文件

Why I can't access files in C

提问人:Gabriel Lucizano 提问时间:11/5/2023 最后编辑:chqrlieGabriel Lucizano 更新时间:11/5/2023 访问量:94

问:

我正在尝试访问文件,但在访问目录时遇到问题。 我的窗户是葡萄牙语的,所以意味着.Área de TrabalhoDesktop

#include <stdio.h>

int main() {

    FILE *file;
    file = fopen("C://Users//gluci//OneDrive//Área de Trabalho//Automatos//teste.txt", "w");
    fprintf(file, "abcde");
    fclose(file);
    return 0;
}

我试过使用 、、 ,但似乎没有任何效果。当我不传递特定目录时,程序正常工作。/\//\\

C Windows 路径 字符编码

评论

4赞 Ted Lyngmo 11/5/2023
可能是因为双斜杠。是什么让你用而不是?///
3赞 Some programmer dude 11/5/2023
它要么是双反斜杠,如 ,要么是单正斜杠,如 。'\\''/'
3赞 Some programmer dude 11/5/2023
至于你的问题,你100%确定文件存在于那个确切的位置吗?您是否尝试过使用没有空格或国际字母的路径?
1赞 Ted Lyngmo 11/5/2023
然后直接调用。它说了什么?perror("");fopen
1赞 Ted Lyngmo 11/5/2023
如果该目录存在并且您在该目录中具有写入权限,它将创建该文件

答:

0赞 DrC 11/5/2023 #1

对于 Windows,您需要一个类似于“C:\Users\gluci...” 的字符串。但是要在类 C 语言中将其输入为字符串,您必须使用“C:\\Users\\gluci\\...”其中,每对中的第一个反斜杠转义第二个反斜杠。

评论

6赞 Ted Lyngmo 11/5/2023
正斜杠也适用于 Windows
0赞 DrC 11/5/2023
我知道,但试图保持问题的味道
0赞 Gabriel Lucizano 11/5/2023
即使有 2 个反斜杠,程序仍然不会创建文件
2赞 chqrlie 11/5/2023 #2

路径名可以在 Windows API 调用中使用 或 作为分隔符。当然,必须按照 C 字符串进行编码,您尝试过,但您不应该使用 .\/\\\//

该问题可能与源文件中使用的非 ASCII 字母文件名的编码有关。默认情况下,Windows 不支持 UTF-8 编码的文件名,因此,如果编辑器使用 UTF-8 编码,则可能会导致问题。ÁC:/Users/gluci/OneDrive/Área de Trabalho/Automatos/teste.txt

您可以尝试不带口音:"C:/Users/gluci/OneDrive/Area de Trabalho/Automatos/teste.txt"

您也可以尝试使用目录的英文名称:C:/Users/gluci/OneDrive/Desktop/Automatos/teste.txt"

如果这些都不起作用,请仅使用 ASCII 字母创建目录的快捷方式,并在路径名中使用该快捷方式。Área de Trabalho

另请记住,您可能没有对目标目录的写入权限,并且完整路径也可能不正确。