使用 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);
}
感谢您的任何帮助! :)
我假设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);
也许你的道路是错误的?但是"所有目录"选项从您指定的路径开始。