所以在我看来这是一个简单的循环问题,只是我一直在逻辑上迷惑自己。
所以我想先计算一个文件夹中的所有文件,然后再计算该文件夹中的所有文件夹,我也要计算其中的文件。
这意味着我必须循环检查是否有文件夹,然后再检查它直到没有更多文件夹。但是我不能写算法,因为我一直迷惑自己。
我很确定有类似这样的标准算法,但是我不记得这个名字了。
这是我到目前为止所拥有的:
var rootDir = Directory.GetDirectories(@"C:\");
foreach (var dir in rootDir)
{
if (Directory.GetDirectories(dir).Length > 0)
{
}
}
答案 0 :(得分:2)
我是否理解正确,您只需要计算文件夹和所有子文件夹中的文件? Directory.GetFiles具有用于查看所有子文件夹的选项。试试这个
Directory.GetFiles(WorkingDir, "*", SearchOption.AllDirectories);
答案 1 :(得分:0)
使用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)");
}
}
}