【问题标题】:Types of absolute paths in WindowsWindows 中的绝对路径类型
【发布时间】:2014-07-31 21:39:35
【问题描述】:

只是好奇这种路径的术语(在 Windows 中)是什么?

"\Users\Name\Desktop\1\dest dir1"

我知道这是一个指向驱动器根目录的绝对路径。

第二个问题,是否有 API 可以将其与“真实”绝对路径区分开来?路径如下:

"C:\Users\Name\Desktop\1\dest dir1"

附言。我显然是在问一般性问题,而不仅仅是与该示例路径有关。

【问题讨论】:

  • 我将第一个称为相对路径,因为它与当前驱动器是相对的。它与..\foo 真的没有什么不同,因为它依赖于工作目录。
  • @RetiredNinja: PathIsRelative 将两条路径都报告为绝对路径。
  • @RetiredNinja,我可能是错的,但它不会和 .\foo 一样,而不是 ..\foo,因为 ..\foo 在下面的目录中查找?
  • @deviantfan:那么区分一条路径与另一条路径是检查前面是否有一个斜杠?如果是正斜杠呢?这就是我寻找 API 的原因。

标签: c++ windows winapi filesystems ntfs


【解决方案1】:

所以从我目前看到的情况来看,应该是这样(没有 WinAPI),对吧?

BOOL IsAbsoluteToDrivePath(LPCTSTR pszPath)
{
    //Checks if the path is absolute to drive
    //RETURN:
    //      = TRUE if yes, it is an absolute to the drive path
    BOOL bRes = FALSE;

    if(pszPath &&
        pszPath[0])
    {
        //Check first char to be a slash
        //INFO: Proved experimentally that / and \ may be treated equally...
        if(pszPath[0] == L'\\' ||
            pszPath[0] == L'/')
        {
            //Do we have a 2nd char?
            if(pszPath[1])
            {
                //Second char should not be a slash
                if(pszPath[1] != L'\\' &&
                    pszPath[1] != L'/')
                {
                    //Not a slash, then it's an absolute path
                    bRes = TRUE;
                }
            }
            else
            {
                //This is a root path (i.e. "\")
                bRes = TRUE;
            }
        }
    }

    return bRes;
}

【讨论】:

    【解决方案2】:

    你错了, 在 Windows 中,绝对路径总是以驱动器的字母或服务器的名称开头 而相对路径是从您正在使用的当前位置派生的路径,它以“\”开头或不带它。

    如果您使用“绝对路径”,它将在您的工作目录中寻找“\Users\Name\Desktop\1\dest dir1”

    还有: Detect whether path is absolute or relative

    PathIsRelative

    【讨论】:

    • 请阅读上面@deviantfan 提供的链接:“单个反斜杠,例如“\directory”或“\file.txt”。这也称为绝对路径." msdn.microsoft.com/en-us/library/windows/desktop/…
    • 有疑问,只需在命令行中尝试 `dir \`...它不是当前工作目录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 2016-01-07
    • 2011-06-15
    • 2011-02-05
    • 1970-01-01
    相关资源
    最近更新 更多