DESKTOP

Search for a File or Directory

9/25/2010 3:18:07 PM
Problem : You need to find a file or directory by name, possibly with wildcards.

Solution:
The DirectoryInfo object contains many useful functions, among them the ability to search the file system for files and folders containing a search pattern. The search pattern can contain wildcards, just as if you were using the command prompt.


Listing 1 provides a simple example that searches a directory tree for any file or directory that matches the input pattern.

Listing 1. Searching for a File or Directory
using System;
using System.Collections.Generic;
using System.IO;

namespace Find
{
class Program
{
static bool _folderOnly = false;
static string _startFolder;
static string _searchTerm;

static void Main(string[] args)
{
if (!ParseArgs(args))
{
PrintUsage();
return;
}
Console.WriteLine("Searching {0} for \"{1}\" {2}",
_startFolder, _searchTerm,
_folderOnly ? "(folders only)" : "");
DoSearch();
}

private static void DoSearch()
{
DirectoryInfo di = new DirectoryInfo(_startFolder);
DirectoryInfo[] directories = di.GetDirectories(_searchTerm,
SearchOption.AllDirectories);
int numResults = directories.Length;
PrintSearchResults(directories);
if (!_folderOnly)
{
FileInfo[] files = di.GetFiles(
_searchTerm,
SearchOption.AllDirectories);
PrintSearchResults(files);
numResults += files.Length;
}

Console.WriteLine("{0:N0} results found", numResults);
}

private static void PrintSearchResults(
DirectoryInfo[] directories)
{
foreach(DirectoryInfo di in directories)
{
Console.WriteLine("{0}\t{1}\t{2}",
di.Name, di.Parent.FullName, "D");
}
}

private static void PrintSearchResults(FileInfo[] files)
{
foreach(FileInfo fi in files)
{
Console.WriteLine("{0}\t{1}\t{2}",
fi.Name, fi.DirectoryName, "F");
}
}

static void PrintUsage()
{
Console.WriteLine(
"Usage: Find [-directory] SearchTerm StartFolder");
Console.WriteLine("Ex: Find -directory code D:\\Projects");
Console.WriteLine("* wildcards are accepted");

}
static bool ParseArgs(string[] args)
{
if (args.Length < 2)
{
return false;
}
if (string.Compare(args[0], "-directory") == 0)
{
_folderOnly = true;
if (args.Length < 3)
return false;
}
_startFolder = args[args.Length - 1];
_searchTerm = args[args.Length - 2];
return true;
}
}
}


Here’s the program output (your results will likely vary):

D:\code\ch11\Find\bin\Debug>Find *media* "c:\Program Files" > temp.txt
Searching c:\Program Files for "*media*"
Windows Media Player c:\Program Files D
VideoMediaHandler.dll c:\Program Files\Movie Maker F
VideoMediaHandler.dll.mui c:\Program Files\Movie Maker\en-US F
3 results found

Note

You may get an “access denied” error while running this program when the search runs across a folder you don’t have permission to access. One way to handle this is to change the search options to SearchOption.TopDirectoryOnly, track the subdirectories in a stack, and perform the recursive search yourself, handling the possible exceptions along the way.


Other  
 
Top 10
-  HP Spectre XT Touchsmart Review - Everything Is Fine Except Battery Life (Part 2)
-  HP Spectre XT Touchsmart Review - Everything Is Fine Except Battery Life (Part 1)
-  Lenovo Thinkpad Carbon Touch Ultrabook Review (Part 3)
-  Lenovo Thinkpad Carbon Touch Ultrabook Review (Part 2)
-  Lenovo Thinkpad Carbon Touch Ultrabook Review (Part 1)
-  Blackberry 10 OS (Part 3)
-  Blackberry 10 OS (Part 2)
-  Blackberry 10 OS (Part 1)
-  How To Keep High-End Speakers In Good Conditions
-  How To Use TV As An Audio Converter
Most View
-  Windows Small Business Server 2011 : Managing User Roles
-  Canon IXUS 510 HS
-  Review: Nikon D4 – The master of the dark arts (Part 2)
-  Sharepoint 2007: Use the My Links to Manage Your Links
-  Every Cloud...(Part 2) - Mobility & Portability
-  Searching for Google’s future (Part 1) - Taking the tablets
-  Dell Inspiron 17R Special Edition - Battery Is A Disappointment
-  10 Valuable TVs For Your Living Room
-  Silverlight Recipes : Creating Silverlight Using Ruby, Python, or JScript
-  Build A Home Theatre PC (Part 2)
-  The Library In Your Pocket (Part 2) - iOS – iPad, Android – Kobo Vox, Kindle Fire, Binatone ReadMe, Google Nexus 7
-  Samsung 830
-  Windows 9 : What to expect - 32-bit support , WinRT & XNA
-  Programming with DirectX : View Transformations
-  Securing Your Silverlight Application
-  Programming the Mobile Web : Mobilizing WordPress and Other CMSs
-  Aerocool Silent Master Blue
-  Getting Started with Device Manager
-  Calendar Plus - Simple And Friendly
-  Transact-SQL in SQL Server 2008 : New date and time Data Types and Functions