那么Windows下路径斜杠(/或\)的正确方向是什么?

Let*_*man 57 uri path backslash

似乎Windows坚持\在文件路径中写反斜杠,而.NET的URI类用斜杠写它们/.有没有正确的方法,即使在最原始的系统中也可以接受?为什么.NET的URI显示与Windows其他部分相比的其他斜杠?

Jed*_*ith 69

在这方面,Windows是操作系统的混蛋子,但是很多API也会接受正斜杠.在Windows上,文件路径如下所示:

C:\Users\jsmith\Documents\file.txt
Run Code Online (Sandbox Code Playgroud)

在类Unix系统(包括Mac OS X和Linux)上,相同的路径如下所示:

/home/jsmith/Documents/file.txt
Run Code Online (Sandbox Code Playgroud)

一个URL,在规范RFC 1738,始终使用正斜杠,与平台无关的:

http://home.example.com/Documents/file.txt
Run Code Online (Sandbox Code Playgroud)

其原因是历史性的.甚至Windows都无法改变我们对URL的看法.当你谈论反斜杠时,你会发现使用它们的唯一平台是Windows(以及其他一些新颖的平台).

你可能会看到除Windows以外使用的反斜杠是UNC路径 - 但是,Windows也是这些路径的主要支持者:

\\HOMESVR\Documents\file.txt
Run Code Online (Sandbox Code Playgroud)

无论你做什么,都不要为你的网站做广告,并说"我的公司dot com反斜杠推广".

  • 布莱恩哈:虽然不对,但确实如此.请参阅:http://blogs.msdn.com/ie/archive/2006/12/06/file-uris-in-windows.aspx (3认同)
  • Internet Explorer 是否接受反斜杠代替斜杠? (2认同)

Ben*_*mes 53

文件路径和URI是不同的.\在Windows文件路径中/是正确的,并且在URI中是正确的.

所以这个文件路径:C:\Documents\Foo转换为这个URI:file:///C:/Documents/Foo

  • 不对.`file:/// C:\ Documents\Foo`工作正常 (4认同)
  • 这个答案是完全错误的。不仅 `file:///C:\Documents\Foo` 有效,`C:/Documents/Foo` 也有效。 (4认同)
  • 值得一提的是反斜杠`/`是几种语言中的_string转义字符...在硬编码字符串中使用反斜杠需要额外的反斜杠; 例如,`var foo ="C:\\ Documents \\ Foo";`. (3认同)
  • 当您尝试使用“file:///”访问文件时,Windows 非常宽松,它允许 file:///C:\Documents\Foo、file:///C:/Documents/Foo 以及混合示例,例如 file: ///C:/Documents\Foo. 您还可以改变字母字符的大小写。 (3认同)

And*_*eck 35

原因是一段历史.创建UNIX时,或者我应该说UNICS时,他们选择/作为目录的分隔符.在这些日子里,存储介质相当小,根目录中的每个目录都是另一个安装的存储设备(/ bin/lib等).

当Microsoft发布MS-DOS版本1.0时,它没有目录支持.他们使用/ character作为程序中的参数(program/a/b)

MS-DOS 1.0,Q-DOS的快速重新命名,是一个CP/M派生的操作系统,它继承了驱动器号(A:C:等)

在后来的版本中,他们想要添加一些目录支持,他们选择使用\,因为/已经在他们的操作系统中有另一种含义.

在现代操作系统中有许多计算机历史的工件,我想大多数人都没有意识到,但仍然对它们的工作方式产生重大影响.

那么,正确的方法是什么?如果有的话,我会说它是/因为类似UNIX的操作系统在微软实现对DOS的目录支持之前是这样的.

  • 没有"正确的方法",但应该注意Windows实际上可以使用两个分隔符. (5认同)
  • @grombeestje:我认为UNIX从MULTICS获取了`/`:) (3认同)

Rub*_*ias 13

作为旁注和谈论.NET,您应该使用System.IO.Path.DirectorySeparatorChar获取当前路径分隔符.

  • 现在我们有了 .NET Core(大概总是在 Mono 上),“[System.IO.Path]::DirectorySeparatorChar”确实在 Unix 平台上报告“/”。然而,属性名称很不幸,特别是考虑到还有“[System.IO.Path]::PathSeparator”,它报告(特定于平台的)字符。用于分隔“PATH”环境变量中的条目(“;”与“:”)。另请注意,还有“[System.IO.Path]::AltDirectorySeparatorChar”,它在 Windows 上也报告“/”,以反映即使在 Windows 上也可以使用“/”的事实。 (2认同)

小智 12

我可以确认:上面的很多消息都是假的......

  • Windows 接受两者/\

  • Linux 只接受/

这是因为当您在 Windows 下开发 PHP 时,您使用/. 它兼容 Windows 或 Linux...


Mic*_*urr 10

至于文件系统路径分隔符,我相信在Windows上所有的 API都会接受正斜杠(但也许有一些没有的错误) - 问题是大多数应用程序不接受它们(或者错误地解析它们) ).

事实上,如果我没记错的话,自从MS-DOS开始支持子目录(v2.0)以来,即使MS-DOS也接受了'/'作为API级别的路径分隔符 - 但到那时'/'字符已经被建立为命令行选项的'switch'字符,因此反斜杠成为DOS(以及后来的Windows)上的事实路径分隔符.

URI是与文件路径类似但不同的动物,URI应始终使用"/"来分隔组件.Windows应用程序和API可能接受'\'作为URI中的分隔符,可能是因为人们熟悉在这些系统上使用反斜杠作为分隔符,并且URI也可用于表示本地文件.


当天无用的琐事 - 在MS-DOS的早期版本中,有一个API可以更改命令行选项切换字符(通常从'/'到' - '),因此命令可能看起来更像Unix,命令会接受'/'作为命令行上的路径分隔符.API不太成功(我想因为它没有被应用程序普遍支持),并且在以后的版本中被删除了.

嗯...在二读时,这整个答案几乎是毫无用处的琐事.


EmF*_*mFi 6

Web 基于 UNIX 方式,用斜杠 (/) 分隔路径中的目录。Windows 用反斜杠 (\) 分隔目录

正确的方法取决于它的用途。对于 Windows 计算机上的本地文件的路径,请使用反斜杠。对于位于基于 UNIX 的计算机(包括 Mac、Linux)上的 Web 资源或文件的路径,请使用斜杠。

.NET 的 URI 使用正斜杠的原因是它的格式适合在 Web 浏览器中使用。

服务器将完成所有必要的工作,将网络资源链接到硬盘上的文件。