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