PC *_*ite 238
/
是Unix和类Unix系统上的路径分隔符.现代Windows通常可以同时使用\
和/
交换文件路径,但微软\
几十年来一直主张使用路径分隔符.
这是出于历史原因,可以追溯到20世纪70年代,超过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
Run Code Online (Sandbox Code Playgroud)
决定使用该\
字符,所以你可以像这样编写这些命令
cd\
dir folder1\folder2
Run Code Online (Sandbox Code Playgroud)
没有错误.
后来,微软和IBM合作开发了一个与DOS无关的操作系统OS/2.OS/2有能力使用两个分隔符,可能会吸引更多的Unix开发人员.当微软和IBM在1990年分道扬,时,微软采用了他们所拥有的代码并创建了Windows NT,所有现代版本的Windows都基于Windows NT,并带有这种分离器不可知论.
由于向后兼容性一直是微软从他们所承担的所有主要操作系统转换(DOS到Win16/DOS,到Win16/Win32,到Win32/WinNT)的游戏名称,这种特性被卡住了,它很可能存在一段时间了.
出于这个原因,存在这种差异.它应该对你正在做的事情没有任何影响,因为就像我说的那样,WinAPI通常可以互换使用它们.但是,如果您/
在期望\
目录名称之间传递时,第三方应用程序可能会中断.如果您使用的是Windows,请坚持使用\
.如果您正在使用Unix或URI(它们的基础在Unix路径中,但这完全是另一个故事),那么请使用/
.
在C#的上下文中:应该注意,因为这在技术上是一个C#问题,如果你想编写更多适用于Unix和Windows的"可移植"C#代码(即使C#主要是Windows语言),可能想要使用该Path.DirectorySeparatorChar
字段,以便您的代码使用该系统上的首选分隔符,并用于Path.Combine()
正确追加路径.
Pek*_*kka 20
MS-DOS 1.0保留了CP/M中命令行选项(或切换)字符约定'/'.那时文件系统中没有目录结构,也没有冲突.
当Microsoft使用MS-DOS(和PC-DOS)2.0开发更像Unix的环境时,他们需要使用与现有命令行选项不冲突的东西来表示路径分隔符.在内部,系统与'/'或'\'同样适用.命令处理器(和许多应用程序)继续使用'/'作为切换字符.
一个CONFIG.SYS
条目SWITCHAR=-
可用于覆盖/
默认改善UNIX兼容.这使得内置命令和标准实用程序使用备用字符.然后可以明确地将Unix路径分隔符用于文件和目录名称.此条目在更高版本中已删除,但记录了DOS调用以在引导后设置该值.
这很少使用,大多数第三方工具保持不变.混乱仍然存在.Unix工具的许多端口都保留' - '开关字符,而有些端口支持这两种约定.
后续的PowerShell命令处理器实现了严格的转义和切换参数,并且在很大程度上避免了混淆,除非使用了传统工具.
问题和答案都与C#无关.
小智 9
在基于Unix的系统上\
是一个转义字符,也就是\
告诉解析器这是一个空格而不是语句的结尾.在Unix系统上/
是目录分隔符.
在Windows上\
是目录分隔符,但/
不能在文件或目录名称中使用.
\
在Windows文件路径中/
是正确的,并且在URI中是正确的.这可以是相关资源.
除了给出的答案之外,值得一提的\
是,它广泛用于\n
\t
编程语言,文本编辑器和应用词法分析的一般系统中的特殊字符(例如).
例如,如果你正在进行编程,有时甚至需要使用另一个(\\
)转义反斜杠以便正确使用它或者需要使用转义字符串(例如C#),这是不方便的@"\test"
.
当然,如前所述,Web URI按标准使用正斜杠 但这两个斜杠都适用于最新和最常用的命令行工具.
更新:经过一段时间的搜索,似乎在整个故事之间/
并且\
在"计算机历史"中,在DOS时代和当时基于Unix的系统中.HowToGeek有一篇关于这个故事的有趣文章.
简而言之,DOS 1.0最初由IBM发布,没有目录支持,并且/
用于另一个("切换")命令功能.当目录在2.0版本中引入时,/
已经在使用中,因此IBM选择了视觉上最接近的符号,即\
.另一方面,Unix标准用于/
目录.
当用户开始使用许多不同的系统时,他们开始变得困惑,使得OS开发人员尝试使系统在两种情况下都能工作 - 这甚至适用于URL的部分,因为一些浏览器支持http:\\ www.test. com\go格式.虽然一般来说这有一些缺点,但是现在整个事情仍然存在于向后分隔的原因,试图支持Windows上的两个斜杠,即使它们不再基于DOS.
你不应该在C#中使用它们.你应该总是使用这个Path
类.这包含一个名为的方法Path.Combine
,可用于创建路径而无需自己指定分隔符.
用法示例:
string fullPath = System.IO.Path.Combine("C:", "Folder1", "Folder2", "file.txt");
Run Code Online (Sandbox Code Playgroud)
\
用于Windows本地文件路径和网络路径,如下所示:
C:\Windows\Temp\
要么 \\NetworkSharedDisk\Documents\Archive\
/
是标准URI所要求的,如: