📅  最后修改于: 2023-12-03 15:29:46.834000             🧑  作者: Mango
在C#中,我们有多种方法可以列出和处理目录及其子目录中的文件。本文将介绍其中的一些常见方法。
Directory.GetDirectories方法返回指定目录的子目录数组。我们可以使用递归方法,将所有子目录遍历,并对这些子目录中的文件执行所需操作。
string rootDirectory = "C:\\Test";
List<string> directories = GetDirectories(rootDirectory);
foreach (string directory in directories)
{
// Do what you want with the directory
}
private List<string> GetDirectories(string rootDirectory)
{
List<string> directories = new List<string>();
foreach (string directory in Directory.GetDirectories(rootDirectory))
{
directories.Add(directory);
directories.AddRange(GetDirectories(directory));
}
return directories;
}
以上代码定义了一个GetDirectories方法,使用递归方式获得指定目录及其子目录中所有目录,并将它们添加到一个List
类DirectoryInfo是类Directory的一个包装类,它提供了一些更方便的方法和属性。使用DirectoryInfo.GetDirectories方法同样可以获取指定目录下的子目录。
string rootDirectory = "C:\\Test";
DirectoryInfo baseDirectory = new DirectoryInfo(rootDirectory);
List<string> directories = GetDirectories(baseDirectory);
foreach (string directory in directories)
{
// Do what you want with the directory
}
private List<string> GetDirectories(DirectoryInfo baseDirectory)
{
List<string> directories = new List<string>();
foreach (DirectoryInfo directory in baseDirectory.GetDirectories())
{
directories.Add(directory.FullName);
directories.AddRange(GetDirectories(directory));
}
return directories;
}
我们定义了一个GetDirectories方法,使用递归方式获得指定目录及其子目录中所有目录,并将它们添加到一个List
可以使用LINQ查询获取指定目录及其子目录中的文件(也可以获取子目录)。此方法不需要递归函数,因此它较为简洁。
下面的代码使用递归方式获得指定目录及其子目录中所有目录,并使用LINQ获取这些目录中的所有文件。
string rootDirectory = "C:\\Test";
List<string> directories = Directory.GetDirectories(rootDirectory, "*", SearchOption.AllDirectories)
.ToList();
IEnumerable<string> files = directories.SelectMany(dir => Directory.GetFiles(dir));
foreach (string file in files)
{
// Do what you want with the file
}
本文介绍了三种列出指定目录及其子目录下文件和文件夹的方法。你可以根据自己的需求选择最适合的方法。