文本搜索工具的制作过程之搜索

    虽然在博客园注册账号很久了,但一直在做读者,刚审批通过博客也来写写随笔,当然水平有限,敬请谅解。

    第一篇博文就拿这几天刚做的一个小工具起篇吧,虽然相对比较简单,相信还有有需要的人的。

    随着电脑上的东西越来越多,尤其是笔记,在需要的时候快速找到所需要的那个文本笔记还真是不好找,用windows的查找功能可以按文件名进行文件查找,要是记得文件名的一星半点找起来还是可以得,但要是要找的内容在文件名中没有体现的话,那找起来可就麻烦了,所以就需要有这么一个工具,通过匹配文本中得内容来查找所需的文件。

   

    上图是该工具的一个布局,通过指定一个路径,指定相应的搜索类型和搜索关键字进行查询,关键字可以是正则表达式。

     第一步,获取要搜索的目录,这个比较容易,使用FolderBrowserDialog让用户选择相应的文件夹,将路径显示在文本框中。代码如下:

  

 1 string rootPath = string.Empty;
 2  //获取要搜索的根目录
 3         private void btnPath_Click(object sender, EventArgs e)
 4         {
 5             FolderBrowserDialog fbd = new FolderBrowserDialog();
 6             if (fbd.ShowDialog() == DialogResult.OK)
 7             {
 8                 rootPath = fbd.SelectedPath;
 9                 txtPath.Text = rootPath;
10             }
11         }

    有了路径就可以在该路径下进行搜索了,第二部就是搜索按钮的事件了,为了顺应使用习惯在按下回车的时候进行搜索,可以将窗体的AcceptButton属性设置为搜索按钮,搜索按钮的事件代码如下:

 1 //搜索按钮
 2         private void btnSearch_Click(object sender, EventArgs e)
 3         {
 4             //获取要搜索的类型
 5             types = txtTypes.Text.Trim();
 6             string[] type = types.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
 7             //获取要搜索的关键字
 8             keys = txtKeys.Text;
 9 
10             //获取文件名集合
11             List<string> files = new List<string>();
12             for (int i = 0; i < type.Length; i++)
13             {
14                 //将符合类型的包含子目录中得所有文件添加到files的泛型集合中
15                 files.AddRange(Directory.GetFiles(rootPath, "*." + type[i], SearchOption.AllDirectories));
16             }
17             listBox1.Items.Clear();//清空listBox的内容
18             //从每个文件中读取文本后匹配,将匹配到的文件全路径添加到一个ListBox中
19             foreach (string file in files)
20             {
21                 string content = File.ReadAllText(file, Encoding.Default);
22                 
23 
24 //区分大小写 25 if (cbxDX.Checked) 26 { 27 if (Regex.IsMatch(content, keys)) 28 { 29 listBox1.Items.Add(file); 30 } 31 } 32 else//忽略大小写 33 { 34 35 if (Regex.IsMatch(content, keys, RegexOptions.IgnoreCase)) 36 { 37 listBox1.Items.Add(file); 38 } 39 } 40 } 41 }

    这样基本功能就完成了,在左侧列表就可以显示搜索到的文本文件的物理全文件名了。接下来的点击显示等将在以后的文章中介绍。

posted @ 2012-10-09 21:42  雪空子  阅读(710)  评论(1编辑  收藏  举报