我的道路是 \\server\folderName1\another name\something\another folder\
如果我不知道路径中有多少个文件夹而且我不知道文件夹名称,如何将每个文件夹名称提取为字符串?
非常感谢
string mypath = @"..\folder1\folder2\folder2"; string[] directories = mypath.Split(Path.DirectorySeparatorChar);
编辑:这将返回目录数组中的每个单独的文件夹.你可以得到这样返回的文件夹数量:
int folderCount = directories.Length;
这在一般情况下是好的:
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
而不是@"\/"
在上面的代码中.就个人而言,我发现这个过于冗长,很可能不会这样做.
意识到这是一个很老的帖子,但是我看到了它 - 最后我决定使用下面的函数,因为它对当时我正在做的事情进行了比上述任何一项更好:
private static ListSplitDirectory(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; }
我看到你的方法 Wolf5370并举起你.
internal static ListSplit(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 ListSplit(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
public static IEnumerableSplit(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; }