C# 文件遍历
代码
public static class FileUtils
{
// 测试一下
public static void TestGetCurrentFileList()
{
var fs = GetFileList(Environment.CurrentDirectory, names:".dll");
foreach (var f in fs)
{
Console.WriteLine(f.FullName);
}
}
/// <summary>
/// 递归遍历文件夹获取文件
/// </summary>
/// <param name="path"></param>
public static List<FileInfo> GetFileList(string path, bool isRecursion = false, int pathDeep = 20, List<FileInfo> fileInfos = null, params string[] names)
{
if (fileInfos == null)
{
fileInfos = new List<FileInfo>();
}
if (pathDeep < 0)
{
return fileInfos;
}
DirectoryInfo theFolder = new DirectoryInfo(path);
//获取文件夹下文件
FileInfo[] files = theFolder.GetFiles();
foreach (var file in files)
{
// 匹配文件
if (names == null || names.Length < 1)
{
fileInfos.Add(file);
}
else
{
foreach (var fn in names)
{
if (string.IsNullOrEmpty(fn))
{
continue;
}
if (file.Name.Contains(fn) || Regex.IsMatch(file.Name, fn))
{
fileInfos.Add(file);
}
}
}
}
if (isRecursion)
{
// 如果是递归,遍历该文件夹下的文件夹
var dirs = theFolder.GetDirectories();
if (!dirs.Any())
{
return fileInfos;
}
foreach (var dir in dirs)
{
GetFileList(dir.FullName, isRecursion, --pathDeep, fileInfos, names);
}
}
return fileInfos;
}
}