基本信息
源码名称:C# 批量查找Word文档中的文本
源码大小:0.01M
文件格式:.zip
开发语言:C#
更新时间:2019-01-18
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559

本次赞助数额为: 2 元 
   源码介绍

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions;
using System.Windows.Forms;

namespace DocxSearcher
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
            this.txtDirectory.Text = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        }

        private void btnSearchDirectory_Click(object sender, EventArgs e)
        {
            var fbd = new FolderBrowserDialog();
            fbd.SelectedPath = this.txtDirectory.Text;

            if (fbd.ShowDialog(this) == DialogResult.OK)
                this.txtDirectory.Text = fbd.SelectedPath;
        }

        private void btnSearch_Click(object sender, EventArgs e)
        {
            this.resultListView.Items.Clear();

            try
            {
                foreach (var filePath in Search(this.txtDirectory.Text, this.txtSearch.Text, this.cBoxUseSubdirectories.Checked, this.cBoxCaseSensitive.Checked, this.rBtnRegex.Checked))
                {
                    var file = new FileInfo(filePath);

                    this.resultListView.Items.Add(new ListViewItem(new string[] { file.Name, string.Format("{0:0.0}", file.Length / 1024d), file.FullName }));
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, string.Format("Exception details:\n{0}", ex), string.Format("Exception '{0}' occurred.", ex.GetType()), MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void resultListView_ItemActivate(object sender, EventArgs e)
        {
            string filePath = ((ListView)sender).SelectedItems[0].SubItems[2].Text;
            if (File.Exists(filePath))
                Process.Start(filePath);
        }

        private static IEnumerable<string> Search(string directory, string searchString, bool searchSubdirectories, bool caseSensitive, bool useRegex)
        {
            var isMatch = useRegex ? new Predicate<string>(x => Regex.IsMatch(x, searchString, caseSensitive ? RegexOptions.None : RegexOptions.IgnoreCase))
                : new Predicate<string>(x => x.IndexOf(searchString, caseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase) >= 0);

            foreach (var filePath in Directory.GetFiles(directory, "*.docx", searchSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly))
            {
                string docxText;

                using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                    docxText = new DocxToStringConverter(stream).Convert();

                if (isMatch(docxText))
                    yield return filePath;
            }
        }
    }
}