计算文件夹内的文件夹

时间:2013-09-07 10:32:15

标签: c#

我需要在我的目录中统计我的所有文件夹。 我需要知道以下路径/文件夹/文件夹的所有数量。 我尝试过使用directoryCount,但只返回主文件夹,而不是我的子文件夹。

3 个答案:

答案 0 :(得分:5)

您可以使用EnumerateDirectories

Directory.EnumerateDirectories(dirPath, "*",
                    SearchOption.AllDirectories).Count();

答案 1 :(得分:3)

您可以使用Directory.GetFilesDirectory.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

这是截图;

enter image description here

还要注意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;
    }

但是您需要确保您可以访问所有子目录,否则您将获得异常。