using System;
using System.IO;
class DirectoryFileCount
{
    static long files = 0;		
    static long directories = 0;	
    static void Main()
    {
        try
        {
            Console.Write("һļе·");
            string directory = Console.ReadLine();
            Console.WriteLine("Ҫѯƥ䴮( *.*)");
            string searchString = Console.ReadLine();
            // ʵDirectoryInfo
            DirectoryInfo dir = new DirectoryInfo(directory);
            if (!dir.Exists)
            {
                throw new DirectoryNotFoundException("ļвڣ");
            }
            FileSystemInfo[] infos = dir.GetFileSystemInfos(searchString);
            Console.WriteLine("ѯ£");
            ListDirectoriesAndFiles(infos, searchString);
            Console.WriteLine("ļеĸУ{0}", directories);
            Console.WriteLine("ļĸ:     {0}", files);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
        finally
        {
            Console.ReadLine();
        }
    }
    static void ListDirectoriesAndFiles(FileSystemInfo[] FSInfo, string SearchString)
    {
        if (FSInfo == null)
        {
            throw new ArgumentNullException("FSInfo");
        }
        if (SearchString == null || SearchString.Length == 0)
        {
            throw new ArgumentNullException("SearchString");
        }
        foreach (FileSystemInfo i in FSInfo)
        {
            if (i is DirectoryInfo)
            {
                directories++;
                DirectoryInfo dInfo = (DirectoryInfo)i;
                ListDirectoriesAndFiles(dInfo.GetFileSystemInfos(SearchString), SearchString);
            }
            else if (i is FileInfo)
            {
                files++;
            }
        }
    }
}
