我需要在我的目录中统计我的所有文件夹。 我需要知道以下路径/文件夹/文件夹的所有数量。 我尝试过使用directoryCount,但只返回主文件夹,而不是我的子文件夹。
答案 0 :(得分:5)
您可以使用EnumerateDirectories
Directory.EnumerateDirectories(dirPath, "*",
SearchOption.AllDirectories).Count();
答案 1 :(得分:3)
您可以使用Directory.GetFiles
和Directory.GetDirectories
方法。
我的C:\Soner
路径下的所有文件:
int files = Directory.GetFiles("C:\\Soner", "*.*", SearchOption.AllDirectories).Length;
//Prints 2766
我的C:\Soner
路径下的所有目录
int dirs = Directory.GetDirectories("C:\\Soner", "*", SearchOption.AllDirectories).Length;
//Prints 715
这是截图;
还要注意Directory.EnumerateDirectories
方法,因为
EnumerateDirectories和GetDirectories方法的不同之处如下: 当您使用EnumerateDirectories时,您可以开始枚举 返回整个集合之前的名称集合;当你 使用GetDirectories,您必须等待整个名称数组 在您可以访问该数组之前返回。因此,当你是 使用许多文件和目录,EnumerateDirectories可以 效率更高。
var count = from dr in
Directory.EnumerateDirectories("C:\\Soner", "*",SearchOption.AllDirectories)
select dr;
编辑后:
我只需要知道我的主文件夹中的两个第一个子文件夹 C:/
你可以使用;
string[] subdir = Directory.GetDirectories("C:\\", "*", SearchOption.AllDirectories);
Console.WriteLine(subdir[0]); // Your first subfolder under your C:\
Console.WriteLine(subdir[1]); // Your second subfolder under your C:\
但要小心。此代码抛出名为“Acces path is denied”的异常,因为您在C:\
驱动器中迭代所有文件夹,而某些文件夹受操作系统保护。
答案 2 :(得分:0)
您可以使用:
public int NumOfDirs(string path)
{
DirectoryInfo dir = new DirectoryInfo(path);
DirectoryInfo[] allDirs = dir.GetDirectories("*", SearchOption.AllDirectories);
return allDirs.Length;
}
但是您需要确保您可以访问所有子目录,否则您将获得异常。