查找特定文件路径下指定文件类型的文件
1
using System;2
using System.IO;3
using System.Runtime.Remoting.Messaging;4
using System.Collections.Specialized;5

6
public class FindFiles7


{8
delegate string[] GetFilesHandler(9
string searchPattern, bool recurseSubdirectories);10

11
public static void Main(string[] args)12

{13
bool recurseSubdirectories = true;14
IAsyncResult[] result = new IAsyncResult[args.Length];15
int count = 0;16

17
foreach (string arg in args)18

{19
if (arg.Trim().ToUpper() == "/S")20

{21
recurseSubdirectories = true;22
break;23
}24
}25

26
GetFilesHandler asyncGetFilesHandler = GetFiles;27

28
Console.WriteLine("Searching: {0}",29
string.Join(", ", args));30
if (recurseSubdirectories)31

{32
Console.WriteLine("\trecursive
");33
}34
Console.WriteLine("Push ENTER to cancel/exit
");35

36
foreach (string arg in args)37

{38
if (arg.Trim().ToUpper() != "/S")39

{40
result[count] = asyncGetFilesHandler.BeginInvoke(41
arg, recurseSubdirectories,42
SearchCompleted, arg);43
}44
count++;45
}46
Console.ReadLine();47
}48

49
public static string[] GetFiles(50
string searchPattern, bool recurseSubdirectories)51

{52
string[] results = null;53

54
// Search for files matching the pattern.55
StringCollection files = new StringCollection();56
string directory;57
directory = Path.GetDirectoryName(searchPattern);58
if ((directory == null) || (directory.Trim().Length == 0))59

{60

61
directory = Directory.GetCurrentDirectory();62
}63

64
files.AddRange(GetFiles(searchPattern));65

66
if (recurseSubdirectories)67

{68
foreach (string subDirectory in69
Directory.GetDirectories(directory))70

{71
files.AddRange(GetFiles(72
Path.Combine(73
subDirectory,74
Path.GetFileName(searchPattern)),75
true));76
}77
}78

79
results = new string[files.Count];80
files.CopyTo(results, 0);81

82
return results;83
}84

85
public static string[] GetFiles(string searchPattern)86

{87
string[] fileNames;88
string directory;89

90
// Set directory , default to the current if the91
// is none specified in the searchPattern.92
directory = Path.GetDirectoryName(searchPattern);93
if ((directory == null) || (directory.Trim().Length == 0))94

{95
directory = Directory.GetCurrentDirectory();96
}97

98
fileNames = Directory.GetFiles(99
Path.GetFullPath(directory),100
Path.GetFileName(searchPattern));101

102
return fileNames;103
}104

105
public static void SearchCompleted(IAsyncResult result)106

{107
string searchPattern = (string)result.AsyncState;108
Console.WriteLine("{0}:", searchPattern);109
AsyncResult asyncResult = (AsyncResult)result;110
GetFilesHandler handler =111
(GetFilesHandler)asyncResult.AsyncDelegate;112
string[] files = handler.EndInvoke(result);113
foreach (string file in files)114

{115
Console.WriteLine("\t" + Path.GetFileName(file));116
}117
}118
}

浙公网安备 33010602011771号