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");