gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:16:57 24 4
gpt4 key购买 nike

我输错了路径,将 c:\foo.txt 写成了 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 之后,PowerShell 进程的实际 当前目录仍然是 C:\Users\social

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

关于驱动器号和冒号后没有斜杠的 Windows 路径 - 它指向什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23955968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com