22 Eylül 2010 Çarşamba

FileFind

Düşündüm de bilgisayarımızda vakit geçirdiğimiz zaman içerisinde günde en az 1 saatimiz dosya yada klasör arama ile geçiyor bununla ilgili birşeyler yazayım dedim oradan esinlen şuradan esinlen ortaya güzel bir class yaptık sizinlede paylaşayım dedim..

using System;
using System.IO;
using System.Text;

namespace FileFind
{
    public delegate void FoundDelegate(string fileName);
    public class FileFind
    {
        public string PathName;
        public string FindText;
        public string FileExt;

        public static bool bStopIt = false;

        private DirectoryInfo dir = null;
        private FileInfo[] files = null;

        public event FoundDelegate OnFileFound;

        public FileFind()
        {
            FileExt = "*.*";
        }

        private bool CheckValidDir()
        {
            bool lExist = false;
            if (lExist = Directory.Exists(PathName))
                dir = new DirectoryInfo(PathName);

            return lExist;
        }

        public void StartSearch()
        {
            if (!CheckValidDir())
            {
                Console.WriteLine("Invalid dir :" + PathName);
                return;
            }

            files = dir.GetFiles(FileExt);
            int i = 0;
            int nFile = files.Length;
            while (i < nFile && (!bStopIt))
            {
                SearchFileContent(files[i].FullName);
                i++;
            }

            if (bStopIt)
                Console.WriteLine("System stop searching...Interrupt by user.");
        }

        private void SearchFileContent(string FileName)
        {
            FileStream file = null;
            long nLen = 0;
            try
            {
                file = new FileStream(FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                nLen = file.Length;
                byte[] buff = new byte[file.Length];
                file.Position = 0;
                file.Read(buff, 0, (int)nLen);
                string str = Encoding.ASCII.GetString(buff);
                if (str.IndexOf(FindText) > -1)
                {
                    if (OnFileFound != null)
                        OnFileFound(FileName);
                }
                buff = null;

            }
            catch (Exception err)
            {
                Console.WriteLine(err.Message);
            }
            finally
            {
                if (file != null)
                {
                    file.Close();
                }
            }
        }
Visual Studio'da yeni bir class library projesi yaratarak FileFind isminde yada artık siz nasıl isterseniz sonra derledikten sonra oluşturulan DLL i nasıl kullanacağınıza örnek olarak;

         [STAThread]
        static void Main(string[] args)
        {

            FileFind ff = new FileFind();
            ff.OnFileFound += new FoundDelegate(OnFoundFile);
            ff.PathName = @"C:\";
            ff.FindText = "Samples";
            FindAsyn f = new FindAsyn(ff.StartSearch);
            f.BeginInvoke(null, null);
            Console.Read();
            FileFind.bStopIt = true;
            Console.Read();
            ff.OnFileFound -= new FoundDelegate(OnFoundFile);

        }

        private static void OnFoundFile(string filename)
        {
            Console.WriteLine(filename);
        }

şu şekilde bir örnekte yaptım umarım işinize yarar diye düşünüyorum...

Hiç yorum yok:

Yorum Gönder