一尘不染

文件路径中正斜杠(/)和反斜杠(\)之间的区别

c#

我想知道文件路径\和之间的区别/。我注意到有时路径包含/,有时路径包含\

如果有人可以解释何时使用\和,那就太好了/


阅读 1071

收藏
2020-05-19

共1个答案

一尘不染

/是Unix和类Unix系统上的路径分隔符。现代Windows通常可以同时使用\/互换使用文件路径,但是\几十年来,Microsoft一直提倡将其用作路径分隔符。

这样做是出于历史原因,可以追溯到1970年代,比Windows早十年。最初,MS-
DOS(早期Windows的基础)不支持目录。/从一开始,Unix就具有使用该字符的目录支持。但是,当在MS-DOS
2.0中添加目录时,Microsoft和IBM已经在命令开关中使用了该/字符,并且由于DOS的轻量级解析器(从QDOS降级,旨在在较低端的硬件上运行),他们找不到在不破坏与现有应用程序兼容性的情况下使用字符的可行方法。/

因此,为避免在将文件路径作为参数传递给以下命令时出现有关“缺少开关”或“无效开关”的错误:

cd/                        <---- no switch specified
dir folder1/folder2        <---- /folder2 is not a switch for dir

决定\改用该字符,因此您可以这样编写这些命令

cd\
dir folder1\folder2

没有错误。

后来,Microsoft和IBM合作开发了与DOS不相关的操作系统OS /
2
。OS /
2具有同时使用两个分隔符的能力,可能吸引了更多的Unix开发人员。当Microsoft和IBM在1990年分道扬,时,Microsoft拿走了自己拥有的代码,并创建了Windows
NT
,所有现代版本的Windows都基于Windows
NT
,并带有这种分隔符不可知论。


由于向后兼容性一直是Microsoft从其进行的所有主要操作系统过渡(DOS到Win16 / DOS,Win16 / Win32,Win32 /
WinNT)的游戏名称,因此这种特殊性仍然存在,并且很可能会存在了一段时间。

出于这个原因,存在这种差异。它实际上对您的操作没有任何影响,因为正如我所说,WinAPI通常可以互换使用。但是,如果您在目录名称之间输入a /时传递a
,则第三方应用程序可能会中断\。如果您使用的是Windows,请坚持使用\。如果您使用的是Unix或URI(它们在Unix路径中具有基础,但这完全是另一回事了),请使用/


在C#上下文中: 应该指出的是,从技术上讲这 一个C#问题,如果您想编写更多在Unix和Windows上都可以使用的“便携式”
C#代码(即使C#主要是Windows语言),则您可能要使用该Path.DirectorySeparatorChar字段,以便您的代码使用该系统上的首选分隔符,并用于Path.Combine()正确地附加路径。

2020-05-19