给定相对路径字符串:
"SomeFolder\\Container\\file.txt"
我想确定最顶层的父文件夹或根文件夹,"SomeFolder"
.
Path.GetPathRoot("SomeFolder\\Container\\file.txt"); // returns empty
我宁愿避免使用“string voodoo”,以便可以将其移植到具有不同目录分隔符的系统中。
是否有一些我忽略的明显方法?
返回 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();
@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;
}
编辑:
修改为去除前导目录分隔符。我预计它们不会有任何输入字符串,但最好计划一下以防万一。