当前位置:  开发笔记 > 编程语言 > 正文

如何从路径中提取每个文件夹名称?

如何解决《如何从路径中提取每个文件夹名称?》经验,为你挑选了5个好方法。

我的道路是 \\server\folderName1\another name\something\another folder\

如果我不知道路径中有多少个文件夹而且我不知道文件夹名称,如何将每个文件夹名称提取为字符串?

非常感谢



1> Matt Brunell..:
string mypath = @"..\folder1\folder2\folder2";
string[] directories = mypath.Split(Path.DirectorySeparatorChar);

编辑:这将返回目录数组中的每个单独的文件夹.你可以得到这样返回的文件夹数量:

int folderCount = directories.Length;


请注意,可能还需要处理[Path.AltDirectorySeparatorChar](http://msdn.microsoft.com/en-us/library/system.io.path.altdirectoryseparatorchar.aspx).(例如,通过`mypath.Split(new [] {Path.DirectorySeparatorChar,Path.AltDirectorySeparatorChar});`)
这在像`\\ ticows01\c $\AgArmourFTP`这样的路径上完全破坏了.对不起,但方法太简单了.

2> Jon..:

这在一般情况下是好的:

yourPath.Split(@"\/", StringSplitOptions.RemoveEmptyEntries)

如果路径本身以(反向)斜杠结束(例如"\ foo\bar \"),则返回的数组中没有空元素.但是,您必须确保它yourPath实际上是一个目录而不是文件.你可以找出它是什么,并补偿它是否是这样的文件:

if(Directory.Exists(yourPath)) {
  var entries = yourPath.Split(@"\/", StringSplitOptions.RemoveEmptyEntries);
}
else if(File.Exists(yourPath)) {
  var entries = Path.GetDirectoryName(yourPath).Split(
                    @"\/", StringSplitOptions.RemoveEmptyEntries);
}
else {
  // error handling
}

我相信这涵盖了所有的基础,而不是太迂腐.它将返回一个string[]你可以迭代的东西foreach,依次获取每个目录.

如果要使用常量而不是@"\/"魔术字符串,则需要使用

var separators = new char[] {
  Path.DirectorySeparatorChar,  
  Path.AltDirectorySeparatorChar  
};

然后使用separators而不是@"\/"在上面的代码中.就个人而言,我发现这个过于冗长,很可能不会这样做.



3> Wolf5370..:

意识到这是一个很老的帖子,但是我看到了它 - 最后我决定使用下面的函数,因为它对当时我正在做的事情进行了比上述任何一项更好:

private static List SplitDirectory(DirectoryInfo parent)
{
    if (parent == null) return null;
    var rtn = new List();
    var di = parent;

    while (di.Name != di.Root.Name)
    {
    rtn.Add(new DirectoryInfo(di));
    di = di.Parent;
    }
    rtn.Add(new DirectoryInfo(di.Root));

    rtn.Reverse();
    return rtn;
}



4> Kelly Elton..:

我看到你的方法 Wolf5370并举起你.

internal static List Split(this DirectoryInfo path)
{
    if(path == null) throw new ArgumentNullException("path");
    var ret = new List();
    if (path.Parent != null) ret.AddRange(Split(path.Parent));
    ret.Add(path);
    return ret;
}

在路径上c:\folder1\folder2\folder3返回

c:\

c:\folder1

c:\folder1\folder2

c:\folder1\folder2\folder3

以该顺序

要么

internal static List Split(this DirectoryInfo path)
{
    if(path == null) throw new ArgumentNullException("path");
    var ret = new List();
    if (path.Parent != null) ret.AddRange(Split(path.Parent));
    ret.Add(path.Name);
    return ret;
}

将返回

c:\

folder1

folder2

folder3



5> K. R. ..:
public static IEnumerable Split(this DirectoryInfo path)
{
    if (path == null) 
        throw new ArgumentNullException("path");
    if (path.Parent != null)
        foreach(var d in Split(path.Parent))
            yield return d;
    yield return path.Name;
}

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有