0

给定相对路径字符串:

"SomeFolder\\Container\\file.txt"

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

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

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

是否有一些我忽略的明显方法?

4

2 回答 2

0

Path.GetPathRoot 方法

返回 path 的根目录,如“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();
于 2013-03-07T00:45:51.543 回答
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;
}

编辑:

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

于 2013-03-07T00:57:49.043 回答