TheDeveloperBlog.com

Home | Contact Us

C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML

<< Back to C-SHARP

C# Recursive File List: GetFiles With AllDirectories

Use Directory.GetFiles with AllDirectories and EnumerateFiles to recursively get lists of files.
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.GetFilesFile
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
C# program that lists files recursively 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); } } } Output 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.

C# program that gets file List 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); } } Output 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

Note: Thanks to Csaba Toth for pointing out the EnumerateFiles method, added in the .NET Framework 4.0.

C# program that uses EnumerateFiles 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); } } } Output 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.
© TheDeveloperBlog.com
The Dev Codes

Related Links:


Related Links

Adjectives Ado Ai Android Angular Antonyms Apache Articles Asp Autocad Automata Aws Azure Basic Binary Bitcoin Blockchain C Cassandra Change Coa Computer Control Cpp Create Creating C-Sharp Cyber Daa Data Dbms Deletion Devops Difference Discrete Es6 Ethical Examples Features Firebase Flutter Fs Git Go Hbase History Hive Hiveql How Html Idioms Insertion Installing Ios Java Joomla Js Kafka Kali Laravel Logical Machine Matlab Matrix Mongodb Mysql One Opencv Oracle Ordering Os Pandas Php Pig Pl Postgresql Powershell Prepositions Program Python React Ruby Scala Selecting Selenium Sentence Seo Sharepoint Software Spellings Spotting Spring Sql Sqlite Sqoop Svn Swift Synonyms Talend Testng Types Uml Unity Vbnet Verbal Webdriver What Wpf