zoukankan      html  css  js  c++  java
  • 文本搜索工具的制作过程之搜索

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

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

        随着电脑上的东西越来越多,尤其是笔记,在需要的时候快速找到所需要的那个文本笔记还真是不好找,用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 }

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

  • 相关阅读:
    python 上传下载文件
    post方式加载iframe
    js 实现打印功能
    python 判断数据类型
    web样式无法正常显示
    C# 调用python
    PDF转换成Txt
    js预览PDF的插件(亲测支持IE9,火狐,等等)
    文件下载
    asp.net网站发布到服务器GET的技能
  • 原文地址:https://www.cnblogs.com/headwolf/p/2717394.html
Copyright © 2011-2022 走看看