我想知道文件路径\
和之间的区别/
。我注意到有时路径包含/
,有时路径包含\
。
如果有人可以解释何时使用\
和,那就太好了/
。
我想知道文件路径\
和之间的区别/
。我注意到有时路径包含/
,有时路径包含\
。
如果有人可以解释何时使用\
和,那就太好了/
。
Answers:
/
是Unix和类Unix系统上的路径分隔符。现代Windows通常可以同时使用\
和/
互换使用文件路径,但是\
数十年来,Microsoft一直提倡将其用作路径分隔符。
这样做的历史原因可追溯到1970年代,比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
决定\
改用该字符,因此您可以这样编写这些命令
cd\
dir folder1\folder2
没有错误。
后来,Microsoft和IBM合作开发了与DOS不相关的操作系统OS / 2。OS / 2具有使用两个分隔符的能力,可能吸引了更多的Unix开发人员。当Microsoft和IBM在1990年分道扬,时,Microsoft拿走了自己拥有的代码并创建了Windows NT,所有现代版本的Windows都基于Windows NT,并带有分隔符不可知论。
由于向后兼容性一直是Microsoft从其进行的所有主要操作系统过渡(DOS到Win16 / DOS,Win16 / Win32,Win32 / WinNT)的游戏名称,因此这种特殊性仍然存在,并且很可能会存在了一段时间。
出于这个原因,存在这种差异。它实际上对您的操作没有任何影响,因为正如我所说,WinAPI通常可以互换使用。但是,如果您在目录名称之间输入a /
时传递a ,则第三方应用程序可能会中断\
。如果您使用的是Windows,请坚持使用\
。如果您使用的是Unix或URI(它们在Unix路径中有基础,但这完全是另一回事了),请使用/
。
在C#上下文中:应该指出的是,由于从技术上讲这是一个C#问题,如果您想编写更多在Unix和Windows上都可以使用的“便携式” C#代码(即使C#主要是Windows语言),您也可以可能要使用该Path.DirectorySeparatorChar
字段,以便您的代码使用该系统上的首选分隔符,并用于Path.Combine()
正确地附加路径。
Path.Combine
。
foo.exe /bar
可能被解释为命令行开关,而foo.exe \bar
可能被解释为是指bar
位于\
当前“驱动器” 根目录中的称为文件/文件夹的文件C:\
。
/
到的标准化\
是在Win32兼容层中完成的,这意味着如果您绕过它,将会有所不同。最著名的例子是扩展长度路径:\\?\C:\
可以在NTFS上按预期工作,但\\?\C:/
不能。
/
和` is not entirely true. For network path you have to use
`(例如\\ <服务器名> bot不能/// <服务器名>)
MS-DOS 1.0保留了CP / M中'/'的命令行选项(或开关)字符约定。那时,文件系统中没有目录结构,也没有冲突。
当Microsoft使用MS-DOS(和PC-DOS)2.0开发更像Unix的环境时,他们需要使用与现有命令行选项不冲突的东西来表示路径分隔符。在内部,系统使用'/'或'\'都可以很好地工作。命令处理器(和许多应用程序)继续使用'/'作为切换字符。
可以使用一个CONFIG.SYS
条目SWITCHAR=-
来覆盖/
默认值以提高Unix兼容性。这使内置命令和标准实用程序使用备用字符。然后可以明确地将Unix路径分隔符用于文件和目录名称。此项在更高版本中已删除,但是记录了DOS调用,以便在引导后设置该值。
这很少使用,大多数第三方工具保持不变。混乱依然存在。Unix工具的许多端口都保留“-”开关字符,而某些端口则同时支持这两种约定。
后续的PowerShell命令处理器实现了严格的转义和切换参数,并在使用旧版工具的地方大体上避免了混乱。
问题和答案都与C#无关。
/
在各种PDP-11操作系统(例如RSTS(1970)和RSX(1972))中,将其用作选件介绍器的做法早于CP / M(1973)。
在基于Unix的系统上,\
是转义字符,即\
告诉解析器这是一个空格,而不是语句的结尾。在Unix系统上/
是目录分隔符。
在Windows上\
是目录分隔符,但是/
不能在文件名或目录名中使用。
\
和/
(以及其他几个符号)不能在文件名中使用,因为DOS不像Unix用户那样具有复杂的解析器。缺少好的分析器是由于MS-DOS是QDOS(“快速而肮脏的操作系统”)的后代。它的目的是使事情在有限的硬件上快速运行。当然,为了向后兼容,目前所有这些仍然存在。
/
被添加为“ Alternate_Directory_Separator”
\
在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格式。尽管总体上来说这有缺点,但是今天整个事情仍然可以向后兼容,即使它们不再基于DOS,也试图在Windows上支持两个斜杠。
` as well as many
make` shell 时Unix会非常生气……您是正确的,因为最近Windows定义了ALTERNATE_PATH_SEPARATOR环境变量,该变量默认为/
Windows ,因此Windows可能接受两者。
/
路径-当然,应用程序可能会在闲暇时误解这些路径,因此并没有太多使用。没有尝试对路径进行自己(破碎)验证的非CLI应用程序从一开始就运行良好。
\
用于Windows本地文件路径和网络路径,如下所示:
C:\Windows\Temp\
要么 \\NetworkSharedDisk\Documents\Archive\
/
标准URI所需要的是:
/
路径(至少7个)。
/
如我在回答中所述的标准URI的使用。