Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
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.
