【问题标题】:Win32 API for determining if a path is relative or absolute?用于确定路径是相对还是绝对的 Win32 API?
【发布时间】:2010-10-25 14:06:51
【问题描述】:

是否有一个 win32 函数可以告诉我路径是相对路径还是绝对路径?

谢谢,

【问题讨论】:

    标签: windows winapi path


    【解决方案1】:

    【讨论】:

    • 当心 - PathIsRelative 为“\\test.exe”返回 0,即使这样的路径被视为相对于当前驱动器。
    • “小心”是使用任何 shell 路径函数时的极好建议。
    • 注意 - PathIsRelative() 为 "X:some\thing" 返回 0,表示 "X:some\thing" 是绝对路径,当它应该被视为相对路径时 - 相对于X: 驱动器上的当前工作目录。 @Jason R. Coombs,我相信 PathIsRelative() 可能会将“\\test.exe”视为“\\anything”,它可能看起来像(部分)UNC 路径。在什么情况下 \\test.exe 被视为相对于当前驱动器?我有一个程序 C:\test.exe。当我 CD 到某个子文件夹并键入 \\test.exe 时,我收到一条消息:“文件名、目录名或卷标语法不正确。”
    • 我不记得我的评论是为了什么。我可能使用 Python 语法来描述 \test.exe。或者,也许我正在尝试一种极端情况,我希望多个反斜杠被视为一个。我关于“​​相对于当前驱动器”的评论让我觉得我希望 \test.exe 报告为相对的。
    【解决方案2】:

    正如 jeffamaphone 所说:您可以使用 Shlwapi 函数PathIsRelative() 来确定给定路径是相对路径还是绝对路径。

    但我想补充一点,您可以使用以下方法轻松地将相对路径转换为绝对路径 _fullpath(),并使用PathRelativePathTo()从绝对路径到相对路径。

    希望这会有所帮助!

    【讨论】:

    • _fullPath 的文档已移至 here。此外,在处理路径时使用这些函数的 ANSI 版本几乎总是一个非常糟糕的主意,除非您的目标是非常旧的 Windows 版本。如果您使用 ACP / ANSI 版本的函数,您的程序将无法处理名称为 바위처럼 단단한/ 的文件夹。您应该始终使用这些函数的 W 版本,至少在 Win10 中对 UTF-8 的支持结束测试之前。
    • @jrh 坚如磐石的评论。 10/10
    猜你喜欢
    • 2015-11-13
    • 2019-09-09
    • 2012-07-09
    • 1970-01-01
    • 2018-09-17
    • 2011-11-25
    • 2012-08-24
    • 2014-03-09
    • 2011-10-16
    相关资源
    最近更新 更多