文本搜索工具的制作过程之搜索
虽然在博客园注册账号很久了,但一直在做读者,刚审批通过博客也来写写随笔,当然水平有限,敬请谅解。
第一篇博文就拿这几天刚做的一个小工具起篇吧,虽然相对比较简单,相信还有有需要的人的。
随着电脑上的东西越来越多,尤其是笔记,在需要的时候快速找到所需要的那个文本笔记还真是不好找,用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 }
这样基本功能就完成了,在左侧列表就可以显示搜索到的文本文件的物理全文件名了。接下来的点击显示等将在以后的文章中介绍。