在Windows操作系统中,文件路径的反斜杠\
是必须的;而在.NET的URI类中,它们被写成了正斜杠/
。是否有一种正确的方式来处理文件路径的分隔符,即使在最原始的系统中也能够接受?为什么.NET的URI会使用与Windows中其他部分不同的斜杠?
在Windows操作系统中,文件路径的反斜杠\
是必须的;而在.NET的URI类中,它们被写成了正斜杠/
。是否有一种正确的方式来处理文件路径的分隔符,即使在最原始的系统中也能够接受?为什么.NET的URI会使用与Windows中其他部分不同的斜杠?
在这方面,Windows 可以说是操作系统中的棘手儿子,但许多 API 也会接受斜杠作为文件路径分隔符。在 Windows 上,文件路径看起来像这样:
C:\Users\jsmith\Documents\file.txt
在类Unix系统(包括Mac OS X和Linux)上,相同的路径看起来像这样:
/home/jsmith/Documents/file.txt
URL在RFC 1738中标准化,始终使用正斜杠,无论平台如何:
http://home.example.com/Documents/file.txt
这是历史原因。即使是Windows也不能改变我们对URL的思考方式。当你谈论反斜杠时,你只会在Windows(和其他一些新颖的平台)上找到它们被使用。
除了Windows之外,你可能会看到反斜杠用于UNC路径——然而,Windows也是主要的支持者:
\\HOMESVR\Documents\file.txt
无论你做什么,都不要为你的网站制作一个商业广告,并说“我的公司点com斜杠促销”。
dir "C:/Windows/System32/"
可以看到一个包括cmd.exe
在内的文件长列表,然后观察dir "C:/Windows/System32/cmd.exe"
无法工作。很奇怪。 - yoyo文件路径和URI是不同的。在Windows文件路径中使用\
是正确的,在URI中使用/
是正确的。
因此,这个文件路径:C:\Documents\Foo
转换为这个URI:file:///C:/Documents/Foo
/
是字符串转义字符...在硬编码的字符串中使用反斜杠会需要额外添加一个反斜杠,例如 var foo = "C:\\Documents\\Foo";
. - Matthematticsfile:///C:\Documents\Foo
可以正常运行。 - Borodinfile:///C:\Documents\Foo
有效,C:/Documents/Foo
也是有效的。 - Timmmm/
符号。 - Esteban Küber顺便提一下,如果涉及到.NET技术,你应该使用System.IO.Path.DirectorySeparatorChar
来获取当前路径的分隔符。
Directory
的SeparatorChar
,所以path分隔符=) 在*nix上可能会有所改变。 - Rubens Farias[System.IO.Path] :: DirectorySeparatorChar
确实在Unix平台上报告/
。然而,属性名称不幸的是,特别是考虑到还有[System.IO.Path] :: PathSeparator
,它报告用于在PATH
环境变量中分隔条目的(特定于平台的)字符(;
vs. :
)。还要注意,有[System.IO.Path] :: AltDirectorySeparatorChar
,它在Windows上也报告/
,以反映您甚至可以在Windows上使用/
的事实。 - mklement0我可以证实:上面许多留言是错误的...
Windows接受/
和\
两种符号。
Linux只接受/
。
这是因为当你在Windows下开发PHP时,你使用/
。它可以兼容Windows和Linux...
互联网的路径分隔符是基于UNIX的方式,使用斜杠(/)来分隔目录。而Windows则使用反斜杠(\)来分隔目录。
正确的方式取决于其用途。对于指向Windows机器上本地文件的路径,请使用反斜杠。对于指向基于UNIX的机器(包括Mac和Linux)上的Web资源或文件的路径,请使用斜杠。
.NET的URI使用正斜杠的原因是因为它是为在Web浏览器中使用而格式化的。
服务器将执行所有必要的工作,将Web资源链接到硬盘上的文件。
Windows支持两种路径格式。
尝试打开Windows资源管理器,输入 C:/Temp/Foo
或者 c:\Temp\Foo
,都可以正确打开文件夹。
\反斜杠很危险,因为你需要一直小心转义。许多编程语言都有一个printf相当的功能,使用反斜杠进行转义。
/正斜杠大多无害。
:冒号曾经(在某种程度上仍然是)被苹果使用过。