C#:获取文件夹中的所有图像文件
我试图从文件夹中获取所有图像,但是,此文件夹还包含子文件夹。 喜欢/ photos / person1 /和/ photos / person2 /。我可以在文件夹中找到照片
path= System.IO.Directory.GetCurrentDirectory() + "/photo/" + groupNO + "/"; public List GetImagesPath(String folderName) { DirectoryInfo Folder; FileInfo[] Images; Folder = new DirectoryInfo(folderName); Images = Folder.GetFiles(); List imagesList = new List(); for (int i = 0; i < Images.Length; i++) { imagesList.Add(String.Format(@"{0}/{1}", folderName, Images[i].Name)); // Console.WriteLine(String.Format(@"{0}/{1}", folderName, Images[i].Name)); } return imagesList; }
但是如何在所有子文件夹中获取所有照片? 我的意思是我想立即在/ photo /目录中获取所有照片。
查看DirectoryInfo.GetFiles重载,该重载采用SearchOption参数并传递SearchOption.AllDirectories以获取包括所有子目录的文件。
另一种选择是使用Directory.GetFiles ,它具有一个带有SearchOption参数的重载:
return Directory.GetFiles(folderName, "*.*", SearchOption.AllDirectories) .ToList();
我正在使用如下方法包装的GetFiles:
public static String[] GetFilesFrom(String searchFolder, String[] filters, bool isRecursive) { List filesFound = new List (); var searchOption = isRecursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; foreach (var filter in filters) { filesFound.AddRange(Directory.GetFiles(searchFolder, String.Format("*.{0}", filter), searchOption)); } return filesFound.ToArray(); }
它易于使用:
String searchFolder = @"C:\MyFolderWithImages"; var filters = new String[] { "jpg", "jpeg", "png", "gif", "tiff", "bmp" }; var files = GetFilesFrom(searchFolder, filters, false);
我找到了可能有效的解决方案
foreach (string img in Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),"*.bmp" + "*.jpg" + "SO ON"))
在类似的线程上有一个很好的单线解决方案:
以递归方式获取所有文件,然后使用LINQ过滤文件扩展名
或者如果无法使用LINQ,则使用RegEx过滤文件扩展名:
var files = Directory.GetFiles("C:\\path", "*.*", SearchOption.AllDirectories) List imageFiles = new List (); foreach (string filename in files) { if (Regex.IsMatch(filename, @".jpg|.png|.gif$")) imageFiles.Add(filename); }
您可以使用GetFiles
GetFiles("*.jpg", SearchOption.AllDirectories)
GetFiles("*.jpg", SearchOption.AllDirectories)
在windows7上有问题。 如果你将目录设置为c:\users\user\documents\
,那么它有一个例外:因为windows xp
, win7在Documents文件夹中有像Music和Pictures这样的链接,但是theese文件夹确实不存在,所以它创建一个例外。 最好使用try..catch
的递归方式。
这允许您使用与Directory.GetFiles(path, pattern, options);
相同的语法和functionDirectory.GetFiles(path, pattern, options);
除了一组模式而不是一个模式。
因此,您也可以使用它来执行任务,例如查找包含过去一年中用于保存记录的“税”一词的所有文件(xlsx,xls,odf,csv,tsv,doc,docx,pdf,txt …)。
public static class CustomDirectoryTools { public static string[] GetFiles(string path, string[] patterns = null, SearchOption options = SearchOption.TopDirectoryOnly) { if(patterns == null || patterns.Length == 0) return Directory.GetFiles(path, "*", options); if(patterns.Length == 1) return Directory.GetFiles(path, patterns[0], options); return patterns.SelectMany(pattern => Directory.GetFiles(path, pattern, options)).Distinct().ToArray(); } }
为了获得c驱动器上的所有图像文件,您可以像这样实现它。
string path = @"C:\"; string[] patterns = new[] {"*.jpg", "*.jpeg", "*.jpe", "*.jif", "*.jfif", "*.jfi", "*.webp", "*.gif", "*.png", "*.apng", "*.bmp", "*.dib", "*.tiff", "*.tif", "*.svg", "*.svgz", "*.ico", "*.xbm"}; string[] images = CustomDirectoryTools.GetFiles(path, patterns, SearchOption.AllDirectories);
您需要递归forms的GetFiles:
DirectoryInfo.GetFiles(pattern, searchOption);
(将AllDirectories指定为SearchOption)
这是一个链接以获取更多信息:
MSDN:DirectoryInfo.GetFiles
这将获取文件夹和子文件夹中所有图像的列表,并且还会关注Windows中的长文件名exception。
// To handle long folder names Pri external library is used. // Source https://github.com/peteraritchie/LongPath using Directory = Pri.LongPath.Directory; using DirectoryInfo = Pri.LongPath.DirectoryInfo; using File = Pri.LongPath.File; using FileInfo = Pri.LongPath.FileInfo; using Path = Pri.LongPath.Path; // Directory and sub directory search function public void DirectoryTree(DirectoryInfo dr, string searchname) { FileInfo[] files = null; var allFiles = new List(); try { files = dr.GetFiles(searchname); } catch (Exception ex) { Console.WriteLine(ex.Message); } if (files != null) { try { foreach (FileInfo fi in files) { allFiles.Add(fi); string fileName = fi.DirectoryName + "\\" + fi.Name; string orgFile = fileName; } var subDirs = dr.GetDirectories(); foreach (DirectoryInfo di in subDirs) { DirectoryTree(di, searchname); } } catch (Exception ex) { Console.WriteLine(ex.Message); } } } public List GetImagesPath(String folderName) { var dr = new DirectoryInfo(folderName); string ImagesExtensions = "jpg,jpeg,jpe,jfif,png,gif,bmp,dib,tif,tiff"; string[] imageValues = ImagesExtensions.Split(','); List imagesList = new List (); foreach (var type in imageValues) { if (!string.IsNullOrEmpty(type.Trim())) { DirectoryTree(dr, "*." + type.Trim()); // output to list imagesList.Add = DirectoryTree(dr, "*." + type.Trim()); } } return imagesList; }
var files = new DirectoryInfo(path).GetFiles("File") .OrderByDescending(f => f.LastWriteTime).First();
这可以为您提供使用其最新mod搜索文件的完美结果
- 使用HTTPS和httpWebRequest
- 如何在卸载时通过Wix删除生成的文件夹和文件?
- 如何处理ComboBox的SelectedIndexChanged事件?
- 如何制作图像按钮
- 如何创建像Html.BeginForm这样的Html Helper
- 如何限制构建仅支持EN“Microsoft.Expression.Interactions.resources.dll”,并避免使用DE,KR,FR,ES等…?
- EF Code First阻止使用Fluent API进行属性映射
- MVC相当于Webforms“UrlAuthorizationModule.CheckUrlAccessForPrincipal”
- 将两个图像合并为一个新图像