C#:获取文件夹中的所有图像文件

Erc*_*can 28 c#

我试图从文件夹中获取所有图像,但是,此文件夹还包含子文件夹.喜欢/ photos/person1 /和/ photos/person2 /.我可以在文件夹中找到照片

  path= System.IO.Directory.GetCurrentDirectory() + "/photo/" + groupNO + "/";
 public List<String> GetImagesPath(String folderName)
    {

        DirectoryInfo Folder;
        FileInfo[] Images;

        Folder = new DirectoryInfo(folderName);
        Images = Folder.GetFiles();
        List<String> imagesList = new List<String>();

        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;
    }
Run Code Online (Sandbox Code Playgroud)

但是如何在所有子文件夹中获取所有照片?我的意思是我想立即在/ photo /目录中获取所有照片.

dtb*_*dtb 38

查看DirectoryInfo.GetFiles重载,该重载采用SearchOption参数并传递SearchOption.AllDirectories以获取包括所有子目录的文件.

另一种选择是使用Directory.GetFiles,它具有一个带有SearchOption参数的重载:

return Directory.GetFiles(folderName, "*.*", SearchOption.AllDirectories)
                .ToList();
Run Code Online (Sandbox Code Playgroud)


Mar*_*Bar 19

我正在使用如下方法包装的GetFiles:

 public static String[] GetFilesFrom(String searchFolder, String[] filters, bool isRecursive)
 {
    List<String> filesFound = new List<String>();
    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();
 }
Run Code Online (Sandbox Code Playgroud)

它易于使用:

String searchFolder = @"C:\MyFolderWithImages";
var filters = new String[] { "jpg", "jpeg", "png", "gif", "tiff", "bmp", "svg" };
var files = GetFilesFrom(searchFolder, filters, false);
Run Code Online (Sandbox Code Playgroud)


小智 5

我找到了可能有效的解决方案

                foreach (string img in Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),"*.bmp" + "*.jpg" + "SO ON"))
Run Code Online (Sandbox Code Playgroud)


小智 5

在类似的线程上有一个很好的单线解决方案:

递归获取所有文件,然后使用LINQ过滤文件扩展名

或者,如果无法使用LINQ,则使用RegEx过滤文件扩展名:

var files = Directory.GetFiles("C:\\path", "*.*", SearchOption.AllDirectories)

List<string> imageFiles = new List<string>();
foreach (string filename in files)
{
    if (Regex.IsMatch(filename, @".jpg|.png|.gif$"))
        imageFiles.Add(filename);
}
Run Code Online (Sandbox Code Playgroud)