【Everything文件搜索C#接口,支持中文】

3902031-36f75b0dc5f9f6da.jpg
141ccd68154ee6f673e13045d9c26dcd.jpg

本文原创by superowner 如有雷同 纯属搬运,转载请注明出处

这个Everything很吊啊,每次搜索它会基于已经搜索的结果(其实它在你用之前实时会监视磁盘文件变化,更新字典树),返回二次处理的结果,所以速度快,因为每次你搜的时候他其实只是在处理自己已有的字典树的key,匹配一下;其实瓶颈就在搜索文件上

注意到官网下载64bit(推荐)多语言版本的exe或便携版安装
下载官方SDK,其实并没有什么源码,就是用了某些通讯技术(好像不是COM)实现和本体通信实现文件搜索,怎么实现这里不管,方法很多

注意,推荐exe安装版,msi可能有权限问题有的电脑安装不了,需要弄个安装器获取设置UAC权限安装,或者手动设置UAC等
安装好后设置向导,唯一需要注意的是,最好设置搜索模式为系统服务,否则可能有权限问题。

弄好后我们用64bit的Winform SDK,最后的部分,添加
Everything_GetResultFullPathNameW();这个api,即可实现对中文文件结果的显示,显示完整路径;示例的Everything_GetResultFileName()只能显示文件名
代码详见如下:

    for (i = 0; i < Everything_GetNumResults(); i++)
        {
            long date_modified;

            Everything_GetResultDateModified(i, out date_modified);

            StringBuilder sb = new StringBuilder(128);
            Everything_GetResultFullPathNameW(i,sb,(uint)sb.Length);
            //System.IO.File.WriteAllText("abc.txt",sb.ToString());
            // add it to the list box               
            listBox1.Items.Insert((int)i, date_modified.ToString() + " "+ sb.ToString() + Everything_GetResultFileName(i));
        }

基于某个文件夹的搜索 string cmd = """ + @"E:\U3Dproject\UnityDemo-master\Assets" + """;
注意,最好加上双引号,比如,我可以基于文件夹搜索cs文件
cmd += " *.cs"; 搜索关键词用空格隔开,表示and。
这个操作就比较骚了,用这个获取结果后,然后再文本字符串搜索,比直接用C#的api快了不止一个数量级

更多api和骚操作见官网和
http://xbeta.info/everything-search-tool.htm

C++的就不bb了,反正都差不多,都是套用api,但是注意C++的string类型,带不带w的

猜你喜欢

转载自blog.csdn.net/weixin_34408624/article/details/87226481
今日推荐