目录。GetAllImageFiles我应该怎么做?
-
12-11-2019 - |
题
我想用一个目录中找到的所有图像填充一个字符串数组。
到目前为止,我使用以下方法来获取jpg格式的所有图像
Dim List() as string = Directory.GetFiles(Path, "*.jpg")
现在我想扩展它并获取所有图像格式。
我能用一下目录吗?GetFiles与"ImageFormat
枚举"?
解决方案
嗨,你可以使用这个,我发现作为社区内容在 http://msdn.microsoft.com/en-us/library/wz42302f.aspx.:
private static string[] GetFiles(string sourceFolder, string filters)
{
return filters.Split('|').SelectMany(filter => System.IO.Directory.GetFiles(sourceFolder, filter)).ToArray();
}
使用惰性评估的替代方案(仅限.Net4.0):
private static IEnumerable<string> GetFiles(string sourceFolder, string filters)
{
return filters.Split('|').SelectMany(filter => System.IO.Directory.EnumerateFiles(sourceFolder, filter));
}
你可以像使用它一样 GetFiles("dir", "*.jpg|*.gif|*.jpeg|*.bmp|*.png")
.它本质上只是对每个过滤器的搜索,所以它是 不是 尽可能有效率。
最终版本是(仅限.Net4.0,但至少可以制作为2.0解决方案):
private static IEnumerable<string> GetImageFiles(string sourceFolder)
{
return from file in System.IO.Directory.EnumerateFiles(sourceFolder)
let extension = Path.GetExtension(file)
where extension == ".jpg" || extension == ".gif" || extension == ".png"
select file;
}
我相信最后一个是最快的,因为它只循环一次。但这取决于模式搜索是如何实现的 Directory
以及操作系统如何搜索。需要一个性能测试,我还没有做过。
其他提示
这是2.0 .NET解决方案。
我在c#中做了类似的东西。此解决方案使用文件夹作为要处理图像的下降点。将每种文件加载作为图像中的每种文件都不正确的解决方案在所有情况下,但我想验证每个文件作为可加载图像。
string[] files = Directory.GetFiles(folderPath);
foreach(string file in files)
{
System.Drawing.Image img = null;
try
{
img = System.Drawing.Image.FromFile(file);
}
catch
{
// do nothing
}
if (img != null)
{
// did something
img.Dispose();
}
}
.
结果我忘了一块...... 在我处理文件之前,我确实使用函数来限制正在处理的文件:
private bool IsImage(FileInfo file)
{
bool imageFile = false;
if ((file.Extension.ToLower() ==".jpg")||
(file.Extension.ToLower() ==".gif")||
(file.Extension.ToLower() == ".bmp") ||
(file.Extension.ToLower() ==".png"))
{
imageFile = true;
}
return imageFile;
}
. 不隶属于 StackOverflow