星期四, 10月 15, 2009

搜尋資料夾內符合"字串"的檔案

最近在處理一些文字的檔案..常常都要在檔案中找到某些關鍵字..我處理的方法是用 dos 裡面的 FINDSTR 的個 command..說真的這真是好用的東西..又支援資源規則運算式..下面有些資源..大家看了就會用啦..

http://www.computerhope.com/findstr.htm
http://freetoad.pixnet.net/blog/post/23437477

不過今天重點不是要講這個..今天是想說..那如果自己寫要怎麼寫阿..剛剛就想了一下..用簡單的方法就可以做到啦..看code吧..

//搜尋的檔案位置
string position = txtPosition.Text;
//搜尋的字
string searchWord = txtSearchWord.Text;

//用linq去處理,這裡是用SelectMany去做..這樣效能會好一點..
var aaaa = Directory.GetFiles(position, "*")
.SelectMany(a => File.ReadAllLines(a), (a, b) => new { FileName = new FileInfo(a).Name, b })
.Where(a => a.b.Contains(searchWord))
.GroupBy(a => a.FileName, b => b.b);

//組出字串
string str = string.Empty;
string br = "\r\n";
foreach (var a in aaaa)
{
str += string.Format("*********{0}*********{1}", a.Key, br);
foreach (var b in a)
{
str += string.Format("{0}{1}{1}", b, br);
}
}
txtContent.Text = str;

結果就是這樣啦..

image

這是用很簡單的方法去做啦..如果要改善..可能就用遞迴去搜尋..再多加一點可調整的參數..這樣就可以騙吃騙吃啦..^_____^||..

參考:
http://msdn.microsoft.com/zh-tw/library/bb534336%28VS.95%29.aspx

2 則留言:

提到...

我以前在 Unix-like 的習慣,都是使用 grep 指令。所以,碰過這樣的需求我是使用 http://www.codeproject.com/KB/cs/wingrep.aspx 你也可以參考看看。

Bibby 提到...

謝謝提供分享ㄟ..^^..