понедельник, 10 января 2011 г.

C# DirIterator

сделал такую простую, но нужную мне, штуку:


using System;
using System.IO;
using System.Collections.Generic;

namespace Program
{
        class MainClass
        {
                public delegate void PathDelegate(FileInfo di);
                /// 
                /// Вызывает pd для каждого файла во всех поддиректориях в rd
                /// 
                ///                 /// root directory
                /// 
                static void dirMap(DirectoryInfo rd,MainClass.PathDelegate pd)
                {
                        FileInfo[] files= null;
                        DirectoryInfo[] subdirs=null;
                        try
                        {
                                files=rd.GetFiles("*");
                        }
                        catch(Exception ex)
                        {
                          Console.WriteLine("error on "+rd.FullName+": "+ex.ToString());
                        }
                        if (files!=null) {
                                foreach (FileInfo file in files) {
                                        pd(file);
                                }
                        }
                        subdirs=rd.GetDirectories("*");
                        foreach (DirectoryInfo d in subdirs) {
                                dirMap(d,pd);
                        }
                }

                public static void Main (string[] args)
                {
                        if(args.Length<1){
                           Console.WriteLine("usage: yatsrobot path");
                        }


                        Console.WriteLine("scaning "+args[0]);

                        if(Directory.Exists(args[0])){
                                Console.WriteLine("directory extists");
                                var di=new DirectoryInfo(args[0]);
                                dirMap(di,x=> Console.WriteLine(x.FullName));
                        }
                        else{
                                Console.WriteLine("directory not extists");
                                return;
                        }
                }
        }
}

Комментариев нет:

Отправить комментарий