C# 文件路径中正斜杠(/)和反斜杠(\)之间的差异
我想知道文件路径中C# 文件路径中正斜杠(/)和反斜杠(\)之间的差异,c#,path,filepath,backslash,slash,C#,Path,Filepath,Backslash,Slash,我想知道文件路径中\和/之间的区别。我注意到,有时路径包含/,有时路径包含\ 如果有人能解释何时使用\和/\用于Windows本地文件路径和网络路径,那就太好了,如下所示: C:\Windows\Temp\或\\NetworkSharedDisk\Documents\Archive\ /是标准URI的要求,如: 在基于Unix的系统上\是一个转义字符,也就是说,\告诉解析器这是一个空格,而不是语句的结尾。在Unix系统上,/是目录分隔符 Windows上的\是目录分隔符,但/不能用于文件或目录名
\
和/
之间的区别。我注意到,有时路径包含/
,有时路径包含\
如果有人能解释何时使用
\
和/
\
用于Windows本地文件路径和网络路径,那就太好了,如下所示:
C:\Windows\Temp\
或\\NetworkSharedDisk\Documents\Archive\
/
是标准URI的要求,如:
在基于Unix的系统上
\
是一个转义字符,也就是说,\
告诉解析器这是一个空格,而不是语句的结尾。在Unix系统上,/
是目录分隔符
Windows上的\
是目录分隔符,但/
不能用于文件或目录名。- RFC 1738中标准化的URL始终使用前斜杠, 不管平台是什么
- 文件路径和URI是不同的<代码>\在Windows文件中是正确的
路径和
在URI中是正确的/
- 一些浏览器(即Firefox和Opera)在 遇到带有反斜杠的URI
- System.IO.Path.DirectorySpectorChar以获取当前路径分隔符
可以是相关资源
/
是Unix和类Unix系统上的路径分隔符。现代Windows通常可以交替使用\
和/
作为文件路径,但几十年来,Microsoft一直主张使用\
作为路径分隔符
这是出于历史原因,可以追溯到20世纪70年代,比Windows早了十多年。开始时,MS-DOS(早期Windows的基础)不支持目录。Unix从一开始就支持使用/
字符的目录。然而,当在MS-DOS 2.0中添加目录时,Microsoft和IBM已经使用了/
字符,并且由于DOS的轻量级解析器(源于,设计用于在低端硬件上运行),他们无法找到一种可行的方法来使用/
字符而不破坏与现有应用程序的兼容性
因此,为了避免在将文件路径作为参数传递给以下命令时出现“缺少开关”或“无效开关”的错误:
cd/ <---- no switch specified
dir folder1/folder2 <---- /folder2 is not a switch for dir
没有错误
后来,微软和IBM合作开发了一个与DOS无关的操作系统,名为。OS/2能够同时使用两个分隔符,可能是为了吸引更多的Unix开发人员。当时,微软采用了他们所拥有并创建的代码,所有现代版本的Windows都是基于这些代码的,带有这种分隔符不可知论
由于向后兼容性一直是微软在所有主要操作系统转换(从DOS到Win16/DOS,到Win16/Win32,再到Win32/WinNT)中的游戏名称,这种特性一直存在,并且可能会存在一段时间 正是由于这个原因,这种差异才存在。它应该对您正在做的事情没有任何影响,因为正如我所说的,WinAPI通常可以互换使用它们。但是,如果您传递一个
/
,而第三方应用程序期望目录名之间有一个\
,则它们可能会中断。如果您使用的是Windows,请坚持使用\
。如果您使用UNIX或S(它们在UNIX路径中有基础,但这完全是另一个故事),那么使用<代码> /< /代码> ./P>
在C#的上下文中:应该注意,因为这在技术上是一个C#问题,如果您想编写更多在Unix和Windows上工作的“可移植”C#代码(即使C#主要是Windows语言),您可能希望使用
Path.directorysepartorchar
字段,以便代码在该系统上使用首选分隔符,并使用Path.Combine()
正确附加路径。保留了命令行选项(或开关)CP/M中“/”的字符约定。当时文件系统中没有目录结构,也没有冲突
当Microsoft使用MS-DOS(和PC-DOS)2.0开发更类似Unix的环境时,他们需要使用与现有命令行选项不冲突的内容来表示路径分隔符。在内部,该系统与“/”或“\”一样工作良好。命令处理器(和许多应用程序)继续使用“/”作为开关字符
一个条目SWITCHAR=-
可以用来覆盖/
默认值以提高Unix兼容性。这使得内置命令和标准实用程序使用替换字符。Unix路径分隔符可以明确地用于文件名和目录名。此项在以后的版本中被删除,但在引导后记录了DOS调用以设置值
这很少使用,大多数第三方工具保持不变。混乱依然存在。Unix工具的许多端口保留“-”开关字符,而有些端口支持这两种约定
后续PowerShell命令处理器实现了严格的转义和切换参数,并在很大程度上避免了混淆,除非在使用旧工具的地方
这个问题和答案都与C#无关
除了给出的答案外,值得一提的是,
\
广泛用于编程语言、文本编辑器和应用词法分析的通用系统中的特殊字符(如\n
\t
)
例如,如果您正在编程,有时甚至需要使用另一个反斜杠(\\
)来转义反斜杠以正确使用它,或者需要使用转义字符串,例如C#@“\test”
)
当然,如前所述,web URI标准使用正斜杠,但这两种斜杠都在
cd\
dir folder1\folder2
string fullPath = System.IO.Path.Combine("C:", "Folder1", "Folder2", "file.txt");