I'm using this in my own app, I thought it might be handy to some of you
you could get a list of all files in a directory and its subdirectories, and you could also apply search pattern(s) when doing the same thing. The documentation comments should be descriptive enough


using System.Collections;
using System.IO;
Code:
#region GetFiles (string Path)
/// <summary>
/// Gets all the files in the given folder path and all its subdirectories
/// </summary>
public static string[] GetFiles (string path)
{
	ArrayList files = new ArrayList();
	getFiles (path, ref files);

	return (string[])files.ToArray(typeof(string));
}
private static void getFiles (string path, ref ArrayList files)
{
	try
	{
		string[] folders = Directory.GetDirectories (path);
		for (int i=0;i<folders.Length;i++)				
			getFiles (folders[i], ref files);

	
		string[] curFiles = Directory.GetFiles (path);
		files.AddRange (curFiles);
	}
	catch
	{}
}
#endregion

#region GetFiles (string path, string[] searchPatterns, bool includeSubFolders) +1 overload
/// <summary>
/// Gets all the files in the given folder path and all its subdirectories.
/// </summary>
/// <param name="searchPatterns">search patterns (ie, "*.exe")</param>
public static string[] GetFiles(string path, string[] searchPatterns, bool includeSubFolders)
{
	ArrayList files = new ArrayList();
	if (includeSubFolders)
	{
		getFiles (path, searchPatterns, ref files);
	}
	else
	{
		try
		{
			for (int i=0; i<searchPatterns.Length; i++)
			{
				string[] curFiles = Directory.GetFiles (path, searchPatterns[i]);
				files.AddRange (curFiles);
			}
		}
		catch
		{}
	}
	return (string[])files.ToArray(typeof(string));
}


/// <summary>
/// Gets all the files in the given folder path and all its subdirectories.
/// </summary>
/// <param name="searchPattern">A series of valid search patterns, separated
/// by ";". For example "*.jpg;prog*.exe"</param>
public static string[] GetFiles(string path, string searchPattern, bool includeSubFolders)
{
	string[] patterns = searchPattern.Split (';');
	return GetFiles (path, patterns, includeSubFolders);
}

private static void getFiles (string path, string[] searchPattern, ref ArrayList files)
{
	// Try to get the current directory's folders
	try
	{
		string[] folders = Directory.GetDirectories (path);
		for (int i=0;i<folders.Length;i++)				
			getFiles (folders[i], searchPattern, ref files);

		
		for (int i=0; i<searchPattern.Length; i++)
		{
			string[] curFiles = Directory.GetFiles (path, searchPattern[i]);
			files.AddRange (curFiles);
		}
	}
	catch
	{}			
}
#endregion