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

时间:2016-07-18 04:22:21

标签: c# path filepath backslash slash

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

如果有人能解释何时使用\/,那就太棒了。

7 个答案:

答案 0 :(得分:232)

/是Unix和类Unix系统上的路径分隔符。现代Windows通常可以互换地使用\/作为文件路径,但微软已经提倡使用\作为路径分隔符数十年。

这是出于历史原因,可以追溯到20世纪70年代,超过Windows十年。最初,MS-DOS(早期Windows的基础)不支持目录。 Unix从一开始就使用/字符支持目录。但是,当在MS-DOS 2.0中添加目录时,Microsoft和IBM已经使用command switches/字符,并且因为DOS的轻量级解析器(来自QDOS,设计为运行在低端硬件上),他们找不到使用/字符的可行方法,而不会破坏与现有应用程序的兼容性。

因此,在将文件路径作为参数传递给这些命令的参数时,要避免出现“丢失开关”或“无效开关”的错误:

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

决定使用\字符,所以你可以像这样写这些命令

cd\
dir folder1\folder2

没有错误。

后来,微软和IBM合作开发了一个与DOS无关的操作系统OS/2。 OS / 2有能力使用两个分隔符,可能会吸引更多的Unix开发人员。当Microsoft and IBM parted ways in 1990时,微软采用了他们所拥有的代码并创建了Windows NT,所有现代版本的Windows都基于这些代码,并带有这种分隔符不可知论。

由于后向兼容性一直是微软从他们所承担的所有主要操作系统转换(DOS到Win16 / DOS,到Win16 / Win32,到Win32 / WinNT)的游戏名称,这种特性被卡住了,它可能会存在一段时间。

正因如此,存在这种差异。它应该对你正在做的事情没有任何影响,因为就像我说的那样,WinAPI通常可以互换使用它们。但是,如果您在目标名称之间预期/时传递\,则第三方应用程序可能会中断。如果您使用的是Windows,请坚持使用\。如果您使用的是Unix或URI(它们的基础是Unix路径,但这完全是另一个故事),那么请使用/

在C#的上下文中:应该注意,因为这个 技术上是一个C#问题,如果你想编写更多“可移植”的C#代码在Unix和Windows上(即使C#主要是Windows语言),您可能希望使用Path.DirectorySeparatorChar字段,以便您的代码使用该系统上的首选分隔符,并使用Path.Combine()正确附加路径

答案 1 :(得分:19)

MS-DOS 1.0保留了&#39; /&#39;的命令行选项(或切换)字符约定。来自CP / M.那时文件系统中没有目录结构,没有冲突。

当Microsoft使用MS-DOS(和PC-DOS)2.0开发更像Unix的环境时,他们需要使用与现有命令行选项不冲突的东西来表示路径分隔符。在内部,系统同样适用于&#39; /&#39;或者&#39; \。命令处理器(和许多应用程序)继续使用&#39; /&#39;作为转换角色。

CONFIG.SYS条目SWITCHAR=-可用于覆盖/默认值以提高Unix兼容性。这使得内置命令和标准实用程序使用备用字符。然后可以明确地将Unix路径分隔符用于文件和目录名称。此条目在更高版本中已删除,但记录了DOS调用以在引导后设置该值。

这很少使用,大多数第三方工具保持不变。混乱仍然存在。 Unix工具的许多端口保留了&#39; - &#39;切换字符,而有些支持两种惯例。

后续的PowerShell命令处理器实现了严格的转义和切换参数,并且在很大程度上避免了混淆,除非使用了传统工具。

  

问题和答案都与C#无关。

答案 2 :(得分:9)

在基于Unix的系统上\是一个转义字符,也就是说,\告诉解析器这是一个空格而不是语句的结尾。在Unix系统上/是目录分隔符。

在Windows \上是目录分隔符,但/不能在文件名或目录名中使用。

答案 3 :(得分:8)

  • 在RFC 1738中标准化的URL始终使用正斜杠, 无论平台如何。
  • 文件路径和URI不同。 \在Windows文件中是正确的 路径和/在URI中是正确的。
  • 几个浏览器(即Firefox和Opera)在遇到灾难时失败了 遇到带有反斜杠的URI。
  • System.IO.Path.DirectorySeparatorChar获取当前路径分隔符

https://github.com/jakkaj/AutofacResolveIssue可以是相关资源。

答案 4 :(得分:7)

除了给出的答案之外,值得一提的是\广泛用于编程语言,文本编辑器和适用的一般系统中的特殊字符(例如\n \t)词汇分析。

如果您正在进行编程,有时甚至需要使用另一个(\\)来反转斜杠以便正确使用它 - 或者需要使用转义字符串,例如C#,这是不方便的@"\test"

当然,如前所述,Web URI使用标准的正斜杠,但两个斜杠都在最新和最常用的命令行工具中工作。

更新:经过一段时间的搜索,似乎/\之间的整个故事可以追溯到计算机历史记录&#34;,在DOS和Unix时代当时的系统。 HowToGeek 对这个故事有一个有趣的article

简而言之,DOS 1.0最初由IBM发布,没有目录支持,/用于另一个(&#34;切换&#34;)命令功能。当在2.0版本中引入目录时,/已经被使用,因此IBM选择了视觉上最接近的符号,即\。另一方面,Unix标准地使用/作为目录。

当用户开始使用许多不同的系统时,他们开始变得困惑,使得操作系统开发人员尝试在两种情况下使系统工作 - 这甚至适用于URL的部分,因为一些浏览器支持 http: \\ www.test.com \ go 格式。虽然一般情况下这有一些缺点,但是现在整个事情仍然是针对向后分隔的原因,试图支持Windows上的两个斜杠,即使它们不再基于DOS。

答案 5 :(得分:6)

你不应该在C#中使用它们。您应该始终使用Path class。这包含一个名为Path.Combine的方法,可用于创建路径而无需自己指定分隔符。

使用示例:

string fullPath = System.IO.Path.Combine("C:", "Folder1", "Folder2", "file.txt");

答案 6 :(得分:5)

\用于Windows本地文件路径和网络路径,如:

C:\Windows\Temp\\\NetworkSharedDisk\Documents\Archive\

/是标准URI所要求的内容,如:

http://www.stackoverflow.com/