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

我想知道文件path中的\/之间的区别。 我注意到有时一个path包含/有时候是与\

如果有人能解释何时使用\/那将是非常好的。

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

这是出于历史原因,早在20世纪70年代,超过十年之前的Windows。 一开始,MS-DOS(早期Windows的基础)不支持目录。 Unix从一开始就有了使用/字符的目录支持。 但是,当在MS-DOS 2.0中添加目录时,Microsoft和IBM已经使用/字符作为命令开关 ,并且由于DOS的轻量级parsing器(后来从QDOS ,devise为运行在低端硬件上),他们找不到一个可行的方式来使用/字符而不破坏与他们现有的应用程序的兼容性。

因此,为了避免在将filepaths作为parameter passing给如下命令时出现“丢失开关”或“无效开关”的错误:

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

决定用\字符来代替,所以你可以这样写这些命令

 cd\ dir folder1\folder2 

没有错误。

后来,微软和IBM在一个与OS / 2无关的操作系统上进行了合作。 OS / 2有能力使用两个分隔符,可能吸引更多的Unix开发者。 当微软和IBM在1990年分道扬</s>时 ,微软采取了他们所拥有的代码,并创build了Windows NT , Windows的所有现代版本都是基于Windows NT的 。


由于向后兼容性是Microsoft从所有主要操作系统转换(DOS到Win16 / DOS,到Win16 / Win32,到Win32 / WinNT)的游戏名称,所以这个特性可能会停滞不前存在一段时间了。

正因为如此,这种差异才存在。 它应该对你所做的没有任何影响,正如我所说的,WinAPI通常可以互换使用它们。 但是,如果您在目录名称之间指定了\ ,则第三方应用程序可能会中断。 如果您使用的是Windows,请使用\ 。 如果你使用的是Unix或者URIs (它们有Unixpath的基础,但是完全是另一回事),那么使用/


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

MS-DOS 1.0保留从CP / M的命令行选项(或开关)字符约定的'/'。 那时文件系统中没有目录结构,也没有冲突。

当Microsoft使用MS-DOS(和PC-DOS)2.0开发更多类Unix环境时,他们需要使用与现有命令行选项不冲突的内容来表示path分隔符。 在内部,该系统与“/”或“\”同样适用。 命令处理器(和许多应用程序)继续使用“/”作为开关字符。

CONFIG.SYS条目SWITCHAR=-可以用来覆盖/ default来提高Unix兼容性。 这使内置命令和标准实用程序使用替代字符。 Unixpath分隔符可以明确地用于文件和目录名称。 此条目在更高版本中被删除,但是有一个DOS调用被logging在启动后设置的值。

这很less使用,大多数第三方工具保持不变。 混乱依然存在。 Unix工具的许多端口保留了“ – ”开关字符,而有些则支持这两种约定。

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

问题和答案都不涉及到C#。

  • 在RFC 1738中标准化的URL总是使用正斜杠,而不pipe平台。
  • 文件path和URI是不同的。 \在Windows文件path中是正确的,并且/在URI中是正确的。
  • 当遇到反斜线的URI时,几个浏览器(即Firefox和Opera)发生灾难性的失败。
  • System.IO.Path.DirectorySeparatorChar获取当前path分隔符

这可以是相关的资源。

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

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

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

如果你是编程实例,有时甚至需要为了正确使用它而需要使用另一个反斜杠( \\ )来反斜杠,或者需要使用转义string,例如C# @"\test"

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

更新:在search一下之后,似乎在/\之间的整个故事可以追溯到当时的DOS和基于Unix的系统的时代的“计算机历史”中。 HowToGeek有关这个故事的一篇有趣的文章 。

简而言之,DOS 1.0最初是由IBM发布的,没有目录支持,而/被用于另一种(“切换”)命令function。 在2.0版本中引入目录时, /已经被使用,所以IBMselect了视觉上最接近的符号,即\ 。 另一方面,Unix标准地使用/用于目录。

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

你不应该在C#中使用。 您应该始终使用Path类 。 这包含一个名为Path.Combine的方法,可以用来创buildpath而不需要自己指定分隔符。

用法示例:

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

\用于Windows本地文件path和networkingpath,如下所示:

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

/是标准URI所要求的,如下所示:

http://www.stackoverflow.com/