使用 SearchOption.AllDirectory 搜索所有目录

本文关键字:搜索 SearchOption AllDirectory 使用 | 更新日期: 2023-09-27 18:36:54

这是我下面的代码。我已经创建了一个过滤器来搜索任何所有图像文件扩展名,但是当我的代码运行时,SearchOption.AllDirectories似乎正在尝试打开特定路径而不是搜索我的所有目录。

有人帮我解决我在这里出错的地方吗?

string[] filters = { "*.jpg", "*.jpeg", "*.png", "*.gif", "*.bmp" };
var directory = new DirectoryInfo(lblText.Text);
var files = new List<FileInfo>();
foreach (var filter in filters)
{
    var results = directory.GetFiles(filter, SearchOption.AllDirectories);
    files.AddRange(results);
}

感谢您的任何帮助! :)

使用 SearchOption.AllDirectory 搜索所有目录

我假设directory是一个DirectoryInfo对象,并且您正在使用这种GetFiles重载。然后从当前目录返回与给定搜索模式匹配并搜索所有子目录FileInfo[]

因此,DirectoryInfo的目录路径是根目录。

例如:

DirectoryInfo imageDir = new DirectoryInfo(@"c:'Images");
FileInfo[] allJPGImages = imageDir.GetFiles(".jpg",  SearchOption.AllDirectories);

根据您的编辑进行编辑

因此,特定路径是lblText中输入/显示的Text。获取具有这些扩展名的所有文件的另一种方法:

string[] filters = { "*.jpg", "*.jpeg", "*.png", "*.gif", "*.bmp" };
List<FileInfo> files = filters
    .SelectMany(filter => directory.EnumerateFiles(filter, System.IO.SearchOption.AllDirectories))
    .ToList();

在开始处理之前不需要将所有文件加载到内存中。 当您处理许多文件和目录时,EnumerateFiles可以更有效率。

我不确定您的代码中有什么过滤器,但这里有一个简单的搜索目录的示例。

            string path = "C:''myFolder1''myFolder2";
            DirectoryInfo dir = new DirectoryInfo(path);
            FileInfo[] files;               
            files = dir.GetFiles("*.*", SearchOption.AllDirectories);

也许你的道路是错误的?但是"所有目录"选项从您指定的路径开始。