为什么我必须在代码中使用双反斜杠作为文件路径?

时间:2015-02-04 17:52:08

标签: escaping backslash

在我的程序中,我正在尝试打开一个文件,例如C:\unescaped\backslashes.txt,但无法打开!为什么呢?

这是什么?

这是一个常见的Q& A的集合。这也是一个社区维基,所以每个人都被邀请参与维护。

为什么会这样?

网站上有很多问题归结为OP不知道他/她需要在源代码中的文件路径中转义反斜杠。问题通常是“为什么我的程序不起作用?”或“为什么找不到文件?”,源代码中的某个地方会有:

const char *fileName = "C:\unescaped\backslashes.txt";

范围是什么?

此问题适用于C,C ++,Java,Python和其他编译器将反斜杠视为转义字符的语言。

Meta帖子供参考 - Proposal for exact-duplicate sink for all the "double-backslashes in filename" questions

1 个答案:

答案 0 :(得分:4)

这是初步答案。它是社区维基,所以随时可以改进它。

在代码中的某处,您有一个包含未转义反斜杠的文件路径。例如:

const char *fileName = "c:\unescaped\backslashes.txt";

您需要将其更改为:

const char *fileName = "c:\\unescaped\\backslashes.txt";

为什么?

C,C ++,Java,Python和其他语言的编译器将反斜杠视为一个特殊字符,称为the escape character

例如,\n将变为换行符。因此,此代码 - printf("C:\new file.txt");将打印

C:
ew file.txt

因此,如果您的文件名包含反斜杠,程序将收到的内容将不会是您在源代码中看到的内容。反斜杠本身可以使用另一个反斜杠进行转义。所以这段代码 - printf("C:\\new file.txt");将打印出来:

C:\new file.txt