给定相对路径字符串:
"SomeFolder\\Container\\file.txt"
我想确定最顶层的父文件夹或根文件夹"SomeFolder"
。
Path.GetPathRoot("SomeFolder\\Container\\file.txt"); // returns empty
我宁愿避免使用“string voodoo”,以便将其移植到具有不同目录分隔符的系统。
我有一些明显的方法可以忽略吗?
答案 0 :(得分:0)
返回路径的根目录,例如 “C:\”,如果path为null则为null,如果path不为则为空字符串 包含根目录信息。
你的道路没有扎根。这就是为什么你得到空字符串的结果。在致电GetPathRoot()
之前,您应首先检查路径是否已植根。
var somePath = "SomeFolder\\Container\\file.txt";
String root;
if (Path.IsPathRooted(somePath))
root = Path.GetPathRoot(somePath);
else
root = somePath.Split(Path.DirectorySeparatorChar).First();
答案 1 :(得分:0)
@Will建议使用Uri
类,我已经将其用于其他一些路径操作,效果很好。
我用以下方法解决了这个问题:
/// <summary>
/// Returns the path root if absolute, or the topmost folder if relative.
/// The original path is returned if no containers exist.
/// </summary>
public static string GetTopmostFolder(string path)
{
if (path.StartsWith(Path.DirectorySeparatorChar.ToString()))
path = path.Substring(1);
Uri inputPath;
if (Uri.TryCreate(path, UriKind.Absolute, out inputPath))
return Path.GetPathRoot(path);
if (Uri.TryCreate(path, UriKind.Relative, out inputPath))
return path.Split(Path.DirectorySeparatorChar)[0];
return path;
}
修改强>
修改以去除前导目录分隔符。我不认为它们有任何输入字符串,但为了以防万一,计划好。