如何判断路径是否显式(即不相对于隐式驱动器或目录)?

时间:2012-12-05 15:10:47

标签: c# .net

我想检查给定路径是否是明确指定特定位置的显式路径。所以,我想排除像:

这样的路径
file
directory
directory\file
C:file
\directory\file

我想允许:

C:\file
C:\directory
C:\directory\file
\\server\share\file
\\server\share\directory\file

Path.IsRooted方法几乎可以满足我的需要,但对于上面的最后两个示例(C:file\directory\file),它返回true,它们分别表示当前目录和当前驱动器。

我可以使用其他方法吗?请注意,我不关心文件/目录是否确实存在。

2 个答案:

答案 0 :(得分:2)

使用Path.GetFullPath()并将结果与​​原始字符串进行比较:

bool IsPathAbsolute(string path)
{
    return Path.GetFullPath(path) == path;
}

答案 1 :(得分:1)

深入研究源代码,可以发现Path.IsPathRooted的实际实现如下:

public static bool IsPathRooted(string path)
{
    if (path != null)
    {
        Path.CheckInvalidPathChars(path);
        int length = path.Length;
        if ((length >= 1 && (path[0] == Path.DirectorySeparatorChar || path[0] == Path.AltDirectorySeparatorChar))
            || (length >= 2 && path[1] == Path.VolumeSeparatorChar))
        {
            return true;
        }
    }
    return false;
}

现在很明显如何调整它以满足您的需求 - 您可以定义一个新方法并稍微改变条件(并且可能稍微重构它们 - 它们看起来不太好):

if ((length >= 1 && ((path[0] == Path.DirectorySeparatorChar && path[1] == Path.DirectorySeparatorChar) || path[0] == Path.AltDirectorySeparatorChar))
    || (length >= 3 && path[1] == Path.VolumeSeparatorChar && path[2] == Path.DirectorySeparatorChar))