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.

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

631 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements