如何计算根目录中的所有文件?

时间:2019-03-26 05:17:19

标签: c# .net algorithm

所以在我看来这是一个简单的循环问题,只是我一直在逻辑上迷惑自己。

所以我想先计算一个文件夹中的所有文件,然后再计算该文件夹中的所有文件夹,我也要计算其中的文件。

这意味着我必须循环检查是否有文件夹,然后再检查它直到没有更多文件夹。但是我不能写算法,因为我一直迷惑自己。

我很确定有类似这样的标准算法,但是我不记得这个名字了。

这是我到目前为止所拥有的:

var rootDir = Directory.GetDirectories(@"C:\");

foreach (var dir in rootDir)
{
    if (Directory.GetDirectories(dir).Length > 0)
    {

    }
}

3 个答案:

答案 0 :(得分:2)

我是否理解正确,您只需要计算文件夹和所有子文件夹中的文件? Directory.GetFiles具有用于查看所有子文件夹的选项。试试这个

Directory.GetFiles(WorkingDir, "*", SearchOption.AllDirectories);

答案 1 :(得分:0)

使用GetFiles

Directory.GetFiles

// Process all files in the directory passed in, recurse on any directories 
// that are found, and process the files they contain.
public static void ProcessDirectory(string targetDirectory) 
{
    // Process the list of files found in the directory.
    string [] fileEntries = Directory.GetFiles(targetDirectory);
    foreach(string fileName in fileEntries)
        ProcessFile(fileName);

    // Recurse into subdirectories of this directory.
    string [] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
    foreach(string subdirectory in subdirectoryEntries)
        ProcessDirectory(subdirectory);
}

// Insert logic for processing found files here.
public static void ProcessFile(string path) 
{
    Console.WriteLine("Processed file '{0}'.", path);       
}

答案 2 :(得分:0)

这是一种计算所有文件文件和每个目录的文件数的解决方案:我正在使用字典来存储所有数据

class Program
{
    public static Dictionary<string, int> dico = new Dictionary<string, int>();

    public static void CountFiles(string nameDirectory)
    {
        int nbrfiles = Directory.GetFiles(nameDirectory).Length;
        dico[targetDirectory] = nbrfiles;

        string[] subdirectories = Directory.GetDirectories(nameDirectory);
        foreach (string subdir in subdirectories)
            CountFiles(subdir);
    }
    static void Main(string[] args)
    {
        string tdir = "e:\\example";
        CountFiles(tdir);
        var totalfiles = dico.Sum(x => x.Value);
        Console.WriteLine($"Directory {tdir} contains {totalfiles} files");
        foreach (var item in dico)
        {
            Console.WriteLine($"Directory {item.Key} has {item.Value} file(s)");
        }
    }
}