Home
Search
Recursive File List: GetFiles With AllDirectoriesUse Directory.GetFiles with AllDirectories and EnumerateFiles to recursively get lists of files.
C#
This page was last reviewed on Nov 17, 2022.
Recursive file list. Directories are often nested. Sometimes we need a list of files in a folder, and also those in each subdirectory.
AllDirectories. The .NET Framework allows a SearchOption.AllDirectories argument to the Directory.GetFiles and EnumerateFiles methods. This is the easiest way to recursively get files.
Directory.GetFiles
File
GetFiles. This program gets a string array of all the files at a certain level of the file system. It also covers all sublevels. Then, it loops through the result and prints the file paths.
Tip You can see that the first level files in the specified directory are printed, and then all subdirectory files as well.
Array
Argument 1 The first argument to Directory.GetFiles is the starting path. You must escape the backslashes in Windows paths.
Argument 2 The second argument is the universal pattern for file names. If you change the asterisks to a string, you can filter files.
Argument 3 The third argument is the enumerated constant SearchOption.AllDirectories, which indicates you want a recursive file search.
Enum
using System; using System.IO; class Program { static void Main() { // Get list of files in the specific directory. // ... Please change the first argument. string[] files = Directory.GetFiles("C:\\PerlsComStage\\", "*.*", SearchOption.AllDirectories); // Display all the files. foreach (string file in files) { Console.WriteLine(file); } } }
C:\PerlsComStage\Default.aspx C:\PerlsComStage\Global.asax C:\PerlsComStage\Web.config C:\PerlsComStage\bin\PerlsComWebProject1.dll C:\PerlsComStage\bin\PerlsComWebProject1.pdb
List example. We convert the array returned by Directory.GetFiles to a List. Then we pass the List instance to another method and display the value returned by its Count property.
List
Note In early versions of the .NET Framework, it may have been necessary to implement custom recursive file search algorithms.
But Today these methods are unnecessary because they overlap with existing functionality.
using System; using System.Collections.Generic; using System.IO; class Program { static void Main() { // Make sure directory exists before using this! var files = new List<string>(Directory.GetFiles("C:\\folder", "*.*", SearchOption.AllDirectories)); Method(files); } static void Method(List<string> files) { Console.WriteLine(files.Count); } }
22
EnumerateFiles. This method receives the directory path as its first argument. The second two arguments are optional. To recurse through directories, use AllDirectories.
Tip With EnumerateFiles, we receive an IEnumerable<string>. This must be evaluated in a foreach-loop or extension method.
IEnumerable
using System; using System.IO; class Program { static void Main() { // Call EnumerateFiles in a foreach-loop. foreach (string file in Directory.EnumerateFiles(@"c:\files", "*.*", SearchOption.AllDirectories)) { // Display file path. Console.WriteLine(file); } } }
c:\files\index.html c:\files\style.css c:\files\images\logo.png c:\files\images\picture.jpg
Notes, custom methods. It is possible to develop a method that uses recursion, or stack-based recursion, to scan directories. This is fun to do, and may be a good learning experience.
But For real programs, using AllDirectories is probably a much better choice due to its well-tested implementation.
A summary. Directory.GetFiles method can perform a recursive file listing. Instead of custom implementations, this method overload provides a clearer, simpler abstraction.
Dot Net Perls is a collection of tested code examples. Pages are continually updated to stay current, with code correctness a top priority.
Sam Allen is passionate about computer languages. In the past, his work has been recommended by Apple and Microsoft and he has studied computers at a selective university in the United States.
This page was last updated on Nov 17, 2022 (simplify).
Home
© 2007-2022 sam allen.
see site info on the changelog.