繁体   English   中英

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

[英]How do I count all the files within a Root Directory?

因此,在我看来,这是一个简单的循环问题,只是我一直对逻辑感到困惑。

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

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

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

这是我到目前为止的内容:

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

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

    }
}

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

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

使用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);       
}

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

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)");
        }
    }
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM