EnumerateFiles method in C#

The Directory.EnumerateFiles() method in C# is used to enumerate all files in a specified directory. It returns an IEnumerable<string> collection of file paths, making it memory-efficient for large directories as it processes files lazily (one at a time) rather than loading all file paths into memory at once.

Syntax

Following is the basic syntax for the Directory.EnumerateFiles() method −

Directory.EnumerateFiles(path)
Directory.EnumerateFiles(path, searchPattern)
Directory.EnumerateFiles(path, searchPattern, searchOption)

Parameters

  • path − The directory path to search for files.

  • searchPattern − The search string to match file names (e.g., "*.*" for all files, "*.txt" for text files).

  • searchOption − Specifies whether to search only the current directory or include subdirectories.

Using EnumerateFiles with SearchOption.AllDirectories

To recursively search through all subdirectories, use SearchOption.AllDirectories

using System;
using System.IO;

class Program {
    static void Main(string[] args) {
        string directoryPath = @"C:\temp";
        
        // Create test directory and files for demonstration
        Directory.CreateDirectory(directoryPath);
        Directory.CreateDirectory(Path.Combine(directoryPath, "subfolder"));
        File.WriteAllText(Path.Combine(directoryPath, "file1.txt"), "Content1");
        File.WriteAllText(Path.Combine(directoryPath, "file2.html"), "Content2");
        File.WriteAllText(Path.Combine(directoryPath, "subfolder", "file3.java"), "Content3");
        
        Console.WriteLine("All files in directory and subdirectories:");
        foreach (string filePath in Directory.EnumerateFiles(directoryPath, "*.*", SearchOption.AllDirectories)) {
            Console.WriteLine(filePath);
        }
    }
}

The output of the above code is −

All files in directory and subdirectories:
C:\temp\file1.txt
C:\temp\file2.html
C:\temp\subfolder\file3.java

Using EnumerateFiles with Specific File Patterns

You can filter files by extension or pattern using the search pattern parameter −

using System;
using System.IO;

class Program {
    static void Main(string[] args) {
        string directoryPath = @"C:\temp";
        
        // Create test files
        Directory.CreateDirectory(directoryPath);
        File.WriteAllText(Path.Combine(directoryPath, "document.txt"), "Text content");
        File.WriteAllText(Path.Combine(directoryPath, "image.jpg"), "Image data");
        File.WriteAllText(Path.Combine(directoryPath, "readme.txt"), "Instructions");
        
        Console.WriteLine("Only .txt files:");
        foreach (string txtFile in Directory.EnumerateFiles(directoryPath, "*.txt")) {
            Console.WriteLine(Path.GetFileName(txtFile));
        }
        
        Console.WriteLine("\nFiles starting with 'd':");
        foreach (string dFile in Directory.EnumerateFiles(directoryPath, "d*.*")) {
            Console.WriteLine(Path.GetFileName(dFile));
        }
    }
}

The output of the above code is −

Only .txt files:
document.txt
readme.txt

Files starting with 'd':
document.txt

Comparison of Search Options

SearchOption Description Behavior
TopDirectoryOnly Default option Searches only the specified directory, not subdirectories
AllDirectories Recursive search Searches the specified directory and all its subdirectories

Error Handling with EnumerateFiles

When working with file enumeration, it's important to handle potential exceptions like DirectoryNotFoundException or UnauthorizedAccessException

using System;
using System.IO;

class Program {
    static void Main(string[] args) {
        string directoryPath = @"C:\temp";
        
        try {
            // Ensure directory exists
            if (!Directory.Exists(directoryPath)) {
                Console.WriteLine("Directory does not exist: " + directoryPath);
                return;
            }
            
            Console.WriteLine("Files found:");
            foreach (string file in Directory.EnumerateFiles(directoryPath)) {
                Console.WriteLine(Path.GetFileName(file));
            }
        }
        catch (UnauthorizedAccessException) {
            Console.WriteLine("Access denied to directory: " + directoryPath);
        }
        catch (DirectoryNotFoundException) {
            Console.WriteLine("Directory not found: " + directoryPath);
        }
    }
}

The output of the above code is −

Directory does not exist: C:\temp

Conclusion

The Directory.EnumerateFiles() method provides an efficient way to iterate through files in directories. Use SearchOption.AllDirectories for recursive searches and specific patterns to filter results. Always handle exceptions when working with file system operations to ensure robust applications.

Updated on: 2026-03-17T07:04:35+05:30

561 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements