代码
1using System; 2using System.IO; 3using System.Runtime.Remoting.Messaging; 4using System.Collections.Specialized; 5 6public class FindFiles 7{ 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 in 69 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 the 91 // 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));101102 return fileNames;103 }104105 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}
转载于:https://www.cnblogs.com/nanshouyong326/archive/2007/05/10/741695.html
转载请注明原文地址: https://win8.8miu.com/read-1483644.html