我想检查给定路径是否是明确指定特定位置的显式路径。所以,我想排除像:
这样的路径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,它们分别表示当前目录和当前驱动器。
我可以使用其他方法吗?请注意,我不关心文件/目录是否确实存在。
答案 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))