如何确定相对路径的最顶层文件夹(根)?

时间:2013-03-07 00:38:32

标签: c# .net path

给定相对路径字符串:

"SomeFolder\\Container\\file.txt"

我想确定最顶层的父文件夹或根文件夹"SomeFolder"

Path.GetPathRoot("SomeFolder\\Container\\file.txt"); // returns empty

我宁愿避免使用“string voodoo”,以便将其移植到具有不同目录分隔符的系统。

我有一些明显的方法可以忽略吗?

2 个答案:

答案 0 :(得分:0)

来自Path.GetPathRoot Method

  

返回路径的根目录,例如   “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;
}

修改

修改以去除前导目录分隔符。我不认为它们有任何输入字符串,但为了以防万一,计划好。