这是我的代码。我已经创建了一个搜索任何所有图像文件扩展名的过滤器,但是当我的代码运行时,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);
}
感谢您的帮助! :)
答案 0 :(得分:2)
我认为directory
是DirectoryInfo
个对象,您正在使用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选项从您指定的路径开始。