Search code examples
c#.netfileinfogetfiles

GetFiles with multiple extensions


Possible Duplicate:
Can you call Directory.GetFiles() with multiple filters?

How do you filter on more than one extension?

I've tried:

FileInfo[] Files = dinfo.GetFiles("*.jpg;*.tiff;*.bmp");
FileInfo[] Files = dinfo.GetFiles("*.jpg,*.tiff,*.bmp");

Solution

  • Why not create an extension method? That's more readable.

    public static IEnumerable<FileInfo> GetFilesByExtensions(this DirectoryInfo dir, params string[] extensions)
    {
        if (extensions == null) 
             throw new ArgumentNullException("extensions");
        IEnumerable<FileInfo> files = Enumerable.Empty<FileInfo>();
        foreach(string ext in extensions)
        {
           files = files.Concat(dir.GetFiles(ext));
        }
        return files;
    }
    

    EDIT: a more efficient version:

    public static IEnumerable<FileInfo> GetFilesByExtensions(this DirectoryInfo dir, params string[] extensions)
    {
        if (extensions == null) 
             throw new ArgumentNullException("extensions");
        IEnumerable<FileInfo> files = dir.EnumerateFiles();
        return files.Where(f => extensions.Contains(f.Extension));
    }
    

    Usage:

    DirectoryInfo dInfo = new DirectoryInfo(@"c:\MyDir");
    dInfo.GetFilesByExtensions(".jpg",".exe",".gif");