Tuesday, May 18, 2010

 

Recursively Enumerate Files

I recently needed to get all files in a folder hierarchy, so I quickly wrote the following C# snippet:

List<string> files = FindMatchingFilesRecurse(startFolder, "*.txt");

public List<string> FindMatchingFilesRecurse(string folder, string filePattern)
{
    List<string> fileList = new List<string>();
 
    if (!string.IsNullOrEmpty(folder))
    {
        FindMatchingFilesHelper(folder, filePattern, fileList);
    }
 
    return fileList;
}
 
private void FindMatchingFilesHelper(string folder, string filePattern, List<string> list)
{
    list.AddRange(Directory.GetFiles(folder, filePattern));
 
    foreach (string dir in Directory.GetDirectories(folder))
    {
        FindMatchingFilesHelper(dir, filePattern, list);
    }
}

But .NET 4.0 now contains the same functionality in a single method call (and as a bonus, it’s approximately 20-30% faster!):


List<string> files = Directory.EnumerateFiles(startFolder, "*.txt", SearchOption.AllDirectories).ToList();
 


    

Powered by Blogger