驱动器号和冒号后没有斜杠的 Windows 路径 - 它指向什么?

2024-03-06

我输错了路径而不是c:\foo.txt wrote c:foo.txt。我预计它要么会失败,要么会解决c:\foo.txt,但它似乎解决了foo.txt在当前用户的主文件夹中。

Powershell 返回:

PS C:\> [System.IO.Path]::GetFullPath("c:\foo.txt")
c:\foo.txt
PS C:\> [System.IO.Path]::GetFullPath("c:foo.txt")
C:\Users\Administrator\foo.txt
PS C:\> [System.IO.Path]::GetFullPath("g:foo.txt")
G:\foo.txt

从命令行运行 explorer.exe 并向其传递上述任何结果都会导致 C:\Users\Administrator\Documents 打开。

我没有找到任何相关文档,我完全困惑,请解释一下这种行为。


当您指定带有驱动器号但没有开头反斜杠的路径时,它是通常解释为指定驱动器上当前目录的相对路径。特别是,这就是普通 Win32 API 文件函数解释它的方式;因此,大多数将未修改的文件路径传递给 Win32 文件函数的软件也会以这种方式运行。

在我的机器上,这在 PowerShell 中按预期工作,除了一个复杂之处:

C:\Users\social>powershell
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

PS C:\Users\social> [System.IO.Path]::GetFullPath("c:foo.txt")
C:\Users\social\foo.txt
PS C:\Users\social> cd \
PS C:\> [System.IO.Path]::GetFullPath("c:foo.txt")
C:\Users\social\foo.txt
PS C:\>

我们在这里看到的是,当我们在 PowerShell 中更改当前目录时,实际上并没有改变当前目录。也就是说,PowerShell 对当前目录有自己的想法,但没有费心告诉 Windows 有关更改的信息。您可以使用 Process Explorer(可以从 Microsoft 网站下载)来确认这一点;在上述情况下,即使使用后cd, the actualPowerShell进程的当前目录仍然是C:\Users\social.

您还提到了资源管理器。据我所知,资源管理器会对给定的路径进行自己的验证,无论出于何种原因,它都不允许驱动器相对路径。如果路径被认为无效,或者不指向实际的文件/文件夹,则默认操作是打开用户的文档文件夹。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

驱动器号和冒号后没有斜杠的 Windows 路径 - 它指向什么? 的相关文章

随机推荐