沒有內置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