使用SearchOption.AllDirectories搜索所有目录

时间:2013-10-24 14:49:19

标签: c#

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

感谢您的帮助! :)

2 个答案:

答案 0 :(得分:2)

我认为directoryDirectoryInfo个对象,您正在使用this overload of GetFiles。然后从匹配给定搜索模式的当前目录返回FileInfo[]并搜索所有子目录

因此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可以更有效。

答案 1 :(得分:0)

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

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

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