我想知道文件路径中\
和/
之间的区别。我注意到有时路径包含/
,有时会包含\
。
如果有人能解释何时使用\
和/
,那就太棒了。
答案 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)
\
在Windows文件中是正确的
路径和/
在URI中是正确的。答案 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所要求的内容,如: