没有内置AFAIK。
下面是一个使用两个Path
和Directory
方法的一些递归的例子:
internal class Program
{
private static void Main(string[] args)
{
Console.WriteLine(NumberOfFoldersDown(@"c:\temp\", @"c:\temp\")); // 0
Console.WriteLine(NumberOfFoldersDown(@"c:\temp\", @"c:\temp\zz\")); // 1
Console.WriteLine(NumberOfFoldersDown(@"c:\temp2\", @"c:\temp\zz\")); // -1
Console.WriteLine(NumberOfFoldersDown(@"c:\temp2\", @"c:\temp2\zz\hui\55\")); // 3
Console.WriteLine(NumberOfFoldersDown(@"c:\temp2\zz\", @"c:\temp2\zz\hui\55\")); // 2
Console.Read();
}
public static int NumberOfFoldersDown(string parentFolder, string subfolder)
{
int depth = 0;
WalkTree(parentFolder, subfolder, ref depth);
return depth;
}
public static void WalkTree(string parentFolder, string subfolder, ref int depth)
{
var parent = Directory.GetParent(subfolder);
if (parent == null)
{
// Root directory and no match yet
depth = -1;
}
else if (0 != string.Compare(Path.GetFullPath(parentFolder).TrimEnd('\\'), Path.GetFullPath(parent.FullName).TrimEnd('\\'), true))
{
// No match yet, continue recursion
depth++;
WalkTree(parentFolder, parent.FullName, ref depth);
}
}
}
我*非常确信*您必须编写你自己的。 –
很好的答案,虽然不是我所希望的。 ;-)有关该方法的任何建议? – Yellow
这种功能的用途(似乎必须与'String.IndexOf'相同,但是与文件夹相同)是有问题的。通常保存路径(所以应用程序直接进入文件夹)或迭代(所以你不知道名字)。这就是它不存在的原因。一个附注(看答案),每当你要写这个函数时:尽可能多地使用'Path','File'和'Directory'功能(例如,'Path.GetFileName')。否则,你将面临很多问题:联电,结束反斜杠,不标准名称等。 – Sinatr