TheDeveloperBlog.com

Home | Contact Us

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

C# Recursive File List

These C# example programs show Directory.GetFiles and EnumerateFiles. They recursively get lists of files.

Recursive file list. Directories are often nested.

Sometimes we need a list of files in a folder and those in each subdirectory. The .NET Framework allows a SearchOption.AllDirectories argument to the Directory.GetFiles and EnumerateFiles methods.

Based on:

.NET 4.5

GetFiles. In this first example, we show a program that 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.

String ArrayConsole.WriteLine

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

The first argument to Directory.GetFiles is the starting path. You must escape the backslashes in Windows paths. We use the double-backslash sequence to do this. The second argument is the universal pattern for file names.

Tip: If you change the asterisks to a string, you can actually filter your files.

And: The third argument is the enumerated constant SearchOption.AllDirectories, which indicates you want a recursive file search.

Enumerated Constant

List. In this example, we convert the array returned by Directory.GetFiles to a List instance. Then we pass the List instance to another method as a formal parameter 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
   (Varies depending on contents of the folder.)

22

EnumerateFiles. Another option for getting files in nested directories is 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 Examples: LINQ, Lists and Arrays

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
c:\files\style.css
c:\files\images\logo.png
c:\files\images\picture.jpg

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

Summary. An overloaded version of the Directory.GetFiles method allows you to perform a recursive file listing. Instead of elaborate custom implementations, this method overload provides a clearer, simpler abstraction.

And: The EnumerateFiles is another option. Its usage is similar to GetFiles, but it returns an IEnumerable.

Thus: Implementing custom recursion and stack-based methods is interesting. But using a proven method is often more effective.


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