0

这是我下面的代码。我已经创建了一个过滤器来搜索任何所有图像文件扩展名,但是当我的代码运行时,它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);
}

谢谢你的帮助!:)

4

2 回答 2

2

我假设directory是一个DirectoryInfo对象,而您正在使用GetFiles. 然后从匹配给定搜索模式的当前目录FileInfo[]返回a 并搜索所有子目录

所以目录路径DirectoryInfo是根目录。

例如:

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

根据您的编辑进行编辑

所以特定的路径是Text输入/显示在lblText. 获取具有这些扩展名的所有文件的另一种方法:

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

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

于 2013-10-24T14:54:47.513 回答
0

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

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

也许你的路径是错误的?但是 AllDirectories 选项从您指定的路径开始。

于 2013-10-24T14:57:21.230 回答