为什么路径或 URL 中可以使用任意数量的斜杠?

为什么路径或 URL 中可以使用任意数量的斜杠?

我今天注意到我在脚本中错误地连接了目录名称,并在两个文件夹之间使用了多个斜杠(例如:c:\users\sidney\\desktop。我注意到代码可以工作,尽管我并不期望它会这样。我cd也尝试在 cmd 中输入路径,发现使用多个斜杠可以正确解析 CMD 中的路径,并且我能够使用https://superuser.com/questions///ask(注意询问前的三个斜杠)导航到此页面

CMD 提示显示文件路径中可以使用多个斜杠,并且仍然有效

它可以正常工作,但是当路径中存在多个斜杠时,幕后究竟发生了什么?我假设幕后desktop\\\\\\New folder会解析为 `["desktop","","","","","","","New Folder"] 并尝试导航到名称为空白的文件夹,但事实似乎并非如此。

答案1

答案可以在微软的文章中找到 命名文件、路径和命名空间

使用反斜杠 ('\') 分隔路径的各个部分。反斜杠将文件名与其路径分开,并将路径中的一个目录名称与另一个目录名称分开。您不能在实际文件或目录的名称中使用反斜杠,因为它是将名称分隔成各个部分的保留字符。

反斜杠的作用是作为分隔符,因此多个连续的反斜杠仍然只能分隔,而不能创建新的组件。这意味着\\不能创建新的空组件 - 没有路径组件可以为空。

大多数操作系统允许在文件名或文件路径的目录部分之间包含多个斜杠。Windows 和大多数 *nix 操作系统都是如此。唯一的例外是与 UNC 结合使用的斜杠,其中 UNC ( \\?\UNC\) 只允许使用两个反斜杠。

有关 Linux 的相同问题,请参阅 这个答案

答案2

当路径中出现多个斜杠时,幕后实际上发生了什么?

在大多数情况下,它们只是在解析过程中被忽略。然而,这完全取决于执行路径解析的程序/系统。

正如@r-greenstreet所说,这个 StackOverflow 问题有一个评论部分指出了 Windows 中此规则的至少一个例外,即dir c:\\。在这种情况下,dir c:dir c:\可以正常工作,而 则dir c:\\不行(即第二个\目录分隔符导致解析问题)。

至于 URL(通常由 Web 服务器解析,实际上与底层操作系统关系不大),也有类似的例外情况,如另一个 Stack Overflow 问题。特别是,多个/路径分隔符可能会干扰内部 URL 重写和相对路径。

我假设幕后desktop\\\\\\New folder会解决["desktop","","","","","","New Folder"]并尝试导航到一个名称为空白的文件夹,但事实似乎并非如此。

我确信(仅)空格不能作为 Windows 中的有效目录名称,因此我认为大多数解析(至少对于 Windows)都会考虑到这一点。请注意,额外的分隔符也不一定被视为“空白”名称 - 可能会起作用,"C:\path\to\some\\folder""C:\path\to\some\ \folder"可能不会。

相关内容