如何使用C#计算具有特定名称的子文件夹中的文件数?

致 R.托雷斯

我有一个看起来像这样的路径结构:

Main_Folder
      ***Sub_Folder1***
           **1) FOLDER_Y**
                 Folder1
                   picture1.png
                   picture2.png
                   picturen.png
                 Folder2
                   picture1.png
                   picture2.png
                   picturen.png
                 FolderN
                   picture1.png
                   picture2.png
                   picturen.png
           **2) FOLDER_X**
                 Folder1
                   picture1.png
                   picture2.png
                   picturen.png
                 Folder2
                   picture1.png
                   picture2.png
                   picturen.png
           **3) FOLDER_Z**
                 Folder1
                   picture1.png
                   picture2.png
                   picturen.png
                 Folder2
                   picture1.png
                   picture2.png
                   picturen.png
   ***Sub_Folder2***
           **1) FOLDER_Y**
                 Folder1
                   picture1.png
                   picture2.png
                   picturen.png
                 Folder2
                   picture1.png
                   picture2.png
                   picturen.png
                 FolderN
                   picture1.png
                   picture2.png
                   picturen.png
           **2) FOLDER_X**
                 Folder1
                   picture1.png
                   picture2.png
                   picturen.png
                 Folder2
                   picture1.png
                   picture2.png
                   picturen.png
           **3) FOLDER_Z**
                 Folder1
                   picture1.png
                   picture2.png
                   picturen.png
                 Folder2
                   picture1.png
                   picture2.png
                   picturen.png
   ***Sub_Folder3***
           **1) FOLDER_Y**
                 Folder1
                   picture1.png
                   picture2.png
                   picturen.png
                 Folder2
                   picture1.png
                   picture2.png
                   picturen.png
                 FolderN
                   picture1.png
                   picture2.png
                   picturen.png
           **2) FOLDER_X**
                 Folder1
                   picture1.png
                   picture2.png
                   picturen.png
                 Folder2
                   picture1.png
                   picture2.png
                   picturen.png
           **3) FOLDER_Z**
                 Folder1
                   picture1.png
                   picture2.png
                   picturen.png
                 Folder2
                   picture1.png
                   picture2.png
                   picturen.png
> Desired mock output: 
> FOLDER_Y # files: 27 
> FOLDER_X # files: 18
> FOLDER_Z # files: 18

我基本上希望用户输入主文件夹的路径,然后遍历每个子文件夹然后从所有子文件夹中输出 ALL Folder_Y 中的文件总数。Folder_X、Folder_Z 也是如此。

我尝试了几种方法都不成功。

public void getFOLDER_Y(string strPath)
{
    string partialName = "FOLDER_Y";

    DirectoryInfo hdDirectoryInWhichToSearch = new DirectoryInfo(strPath);
    FileInfo[] filesInDir = hdDirectoryInWhichToSearch.GetFiles("*" + partialName + "*.*");
    DirectoryInfo[] dirsInDir = hdDirectoryInWhichToSearch.GetDirectories("*" + partialName + "*.*");

    foreach (FileInfo foundFile in filesInDir)
    {
        string fullName = foundFile.FullName;
        richtxt_results.Text += fullName + "\n";

    }

    foreach (DirectoryInfo foundDir in dirsInDir)
    {
        string fullName = foundDir.FullName;
        richtxt_results.Text += fullName + "\n";
    }
}
图书
    public static void CountFiles(string path)
    {
        int xFileCount = 0;
        int yFileCount = 0;
        int zFileCount = 0;

        var files = Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories);

        foreach(string file in files)
        {
            string folder = new DirectoryInfo(Path.GetDirectoryName(file)).Name;
            if (folder == "FOLDER_X")
                xFileCount++;
            if (folder == "FOLDER_Y")
                yFileCount++;
            if (folder == "FOLDER_Z")
                zFileCount++;
        }

        Console.WriteLine("X Files : {0}", xFileCount);
        Console.WriteLine("Y Files : {0}", yFileCount);
        Console.WriteLine("Z Files : {0}", zFileCount);
    }

小贴士:

  • 如果您想搜索特定类型的文件(例如,仅文本文件),那么您可以将搜索模式传递​​给 Directory.GetFiles(),例如“ .txt”而不是“ .*”。
  • 如果你想让它更通用,而不是仅仅硬编码你的文件夹名称,你可以将它作为参数传递。

所以我真的会使用这个函数,并用你想要的任何文件夹名称调用它:

    public static int CountFiles(string path, string folderToSearch)
    {
        int fileCount = 0;

        var files = Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories);

        foreach (string file in files)
        {
            string folder = new DirectoryInfo(Path.GetDirectoryName(file)).Name;
            if (folder == folderToSearch)
                fileCount++;
        }

        return fileCount;
    }

然后像这样调用它:

    static void Main(string[] args)
    {
        int xFiles = CountFiles("path goes here", "FOLDER_X");
        int yFiles = CountFiles("path goes here", "FOLDER_Y");
        int zFiles = CountFiles("path goes here", "FOLDER_Z");
    }

编辑:对获取直接目录名称的方式进行了一些小改动。

EDIT2:编辑以纳入@MickyD 的建议。

EDIT3:这将通过您最近的要求。

    public static int CountFiles2(string path, string folderToSearch)
    {
        int fileCount = 0;
        var dirs = Directory.EnumerateDirectories(path, folderToSearch, SearchOption.AllDirectories).ToList();

        foreach (string dir in dirs)
        {
            var files = Directory.EnumerateFiles(dir, "*.*", SearchOption.AllDirectories);
            if (files != null)
                fileCount += files.Count();
        }

        return fileCount;
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何删除具有特定名称的文件夹

批处理命令删除所有具有特定名称的子文件夹

如何在Python中删除具有特定名称的文件夹?

如何在文件夹中打印具有特定名称的文件

在Scala中搜索具有特定名称的文件夹

批处理命令删除所有具有特殊字符的特定名称的子文件夹

Linux:如何删除文件夹中除具有特定名称的文件以外的所有文件?

应用$ filter选项以在Graph API中检索具有特定名称的文件夹

在子文件夹中找到具有特定名称的空文件夹?

有效计数目录和子文件夹中具有特定名称的文件

Powershell删除具有特定名称的子文件夹

如何使用FileSystemWatcher监视父目录下特定名称的所有文件夹?

如何使用Powershell删除具有特定名称的所有文件夹

从某个目录中删除具有特定名称的文件和文件夹

计算目录中具有特定名称的文件数

使用查找在具有特定名称但深度未知的子文件夹中获取文件

删除文件夹中除具有特定名称的文件夹外的所有文件夹

如何计算具有特定模式的子文件夹中的文件数?

使用Powershell计数子文件夹中具有特定名称的文件数

如何在服务器上查找具有特定名称的文件夹?

重命名文件夹中具有特定名称的所有具有特定格式的文件

Laravel - 如何显示公共文件夹中具有指定名称的图像?

在另一个文件夹中创建相同的子文件夹,并复制具有特定名称的文件

如何将文件递归复制到具有特定名称的所有文件夹中(首选批处理文件)

如何从具有特定名称模式的文件夹的内容创建 zip 文件?

使用 PowerShell 重命名目录和子文件夹中具有给定名称的批量文件

如何在VBA中打开具有特定名称的文件夹中的文件?

Python:如何将具有特定名称的文件移动到具有相同名称的文件夹

如何压缩具有特定名称的多个文件夹?