查找特定文件路径下指定文件类型的文件

it2022-05-09  29

代码   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


最新回复(0)