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
File Searching using C#
File searching in C# allows you to programmatically locate and examine files within directories using the System.IO namespace. The DirectoryInfo and FileInfo classes provide powerful methods to search, filter, and retrieve detailed information about files and directories.
Syntax
Following is the syntax for creating a DirectoryInfo object and searching files −
DirectoryInfo directory = new DirectoryInfo(@"path\to\directory"); FileInfo[] files = directory.GetFiles();
Following is the syntax for searching files with specific patterns −
FileInfo[] files = directory.GetFiles("*.txt"); // Text files only
FileInfo[] files = directory.GetFiles("*", SearchOption.AllDirectories); // All files recursively
Basic File Searching
The simplest way to search files is to use DirectoryInfo.GetFiles() method to retrieve all files from a specific directory −
using System;
using System.IO;
namespace Demo {
class Program {
static void Main(string[] args) {
// Create a temporary directory and files for demonstration
string tempDir = Path.Combine(Path.GetTempPath(), "FileSearchDemo");
Directory.CreateDirectory(tempDir);
// Create some sample files
File.WriteAllText(Path.Combine(tempDir, "document.txt"), "Sample text content");
File.WriteAllText(Path.Combine(tempDir, "data.csv"), "Name,Age\nJohn,30");
File.WriteAllText(Path.Combine(tempDir, "config.xml"), "<config></config>");
// Search for files
DirectoryInfo mydir = new DirectoryInfo(tempDir);
FileInfo[] files = mydir.GetFiles();
Console.WriteLine("Files found:");
foreach (FileInfo file in files) {
Console.WriteLine("File Name: {0}, Size: {1} bytes", file.Name, file.Length);
}
// Clean up
Directory.Delete(tempDir, true);
}
}
}
The output of the above code is −
Files found: File Name: document.txt, Size: 19 bytes File Name: data.csv, Size: 14 bytes File Name: config.xml, Size: 15 bytes
Searching Files with Patterns
You can search for specific file types using search patterns with wildcards −
using System;
using System.IO;
namespace Demo {
class Program {
static void Main(string[] args) {
// Create a temporary directory with various file types
string tempDir = Path.Combine(Path.GetTempPath(), "PatternSearchDemo");
Directory.CreateDirectory(tempDir);
// Create sample files with different extensions
File.WriteAllText(Path.Combine(tempDir, "notes.txt"), "Text file");
File.WriteAllText(Path.Combine(tempDir, "report.docx"), "Document");
File.WriteAllText(Path.Combine(tempDir, "image.jpg"), "Image data");
File.WriteAllText(Path.Combine(tempDir, "readme.txt"), "Another text");
DirectoryInfo dir = new DirectoryInfo(tempDir);
// Search for text files only
FileInfo[] txtFiles = dir.GetFiles("*.txt");
Console.WriteLine("Text files found:");
foreach (FileInfo file in txtFiles) {
Console.WriteLine("- {0} ({1} bytes)", file.Name, file.Length);
}
// Search for files starting with 'r'
FileInfo[] rFiles = dir.GetFiles("r*");
Console.WriteLine("\nFiles starting with 'r':");
foreach (FileInfo file in rFiles) {
Console.WriteLine("- {0}", file.Name);
}
// Clean up
Directory.Delete(tempDir, true);
}
}
}
The output of the above code is −
Text files found: - notes.txt (9 bytes) - readme.txt (12 bytes) Files starting with 'r': - report.docx - readme.txt
Recursive File Searching
To search files in subdirectories recursively, use the SearchOption.AllDirectories parameter −
using System;
using System.IO;
namespace Demo {
class Program {
static void Main(string[] args) {
// Create directory structure with subdirectories
string baseDir = Path.Combine(Path.GetTempPath(), "RecursiveSearchDemo");
string subDir = Path.Combine(baseDir, "SubFolder");
Directory.CreateDirectory(subDir);
// Create files in main directory
File.WriteAllText(Path.Combine(baseDir, "main.txt"), "Main file");
File.WriteAllText(Path.Combine(baseDir, "config.ini"), "Config");
// Create files in subdirectory
File.WriteAllText(Path.Combine(subDir, "sub.txt"), "Sub file");
File.WriteAllText(Path.Combine(subDir, "data.log"), "Log data");
DirectoryInfo dir = new DirectoryInfo(baseDir);
// Non-recursive search
Console.WriteLine("Files in main directory only:");
FileInfo[] mainFiles = dir.GetFiles();
foreach (FileInfo file in mainFiles) {
Console.WriteLine("- {0}", file.Name);
}
// Recursive search
Console.WriteLine("\nAll files (including subdirectories):");
FileInfo[] allFiles = dir.GetFiles("*", SearchOption.AllDirectories);
foreach (FileInfo file in allFiles) {
Console.WriteLine("- {0} (in {1})", file.Name, file.DirectoryName);
}
// Clean up
Directory.Delete(baseDir, true);
}
}
}
The output of the above code is −
Files in main directory only: - main.txt - config.ini All files (including subdirectories): - main.txt (in C:\Users\...\Temp\RecursiveSearchDemo) - config.ini (in C:\Users\...\Temp\RecursiveSearchDemo) - sub.txt (in C:\Users\...\Temp\RecursiveSearchDemo\SubFolder) - data.log (in C:\Users\...\Temp\RecursiveSearchDemo\SubFolder)
Common Search Patterns
| Pattern | Description | Example |
|---|---|---|
* |
All files | GetFiles("*") |
*.txt |
Files with .txt extension | GetFiles("*.txt") |
data* |
Files starting with "data" | GetFiles("data*") |
*report* |
Files containing "report" | GetFiles("*report*") |
?.txt |
Single character + .txt | GetFiles("?.txt") |
Conclusion
File searching in C# using DirectoryInfo and FileInfo classes provides flexible methods to locate files with various search patterns and options. You can search specific file types, use wildcards for pattern matching, and perform recursive searches across subdirectories to efficiently manage and locate files programmatically.
