查找特定文件路径下指定文件类型的文件
代码
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));
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}
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));
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}