出处:http://hi.baidu.com/chenxiong0115/blog/item/b31e573a3d8bd6e715cecbb6.html

前些时间对Everything很感兴趣,花了差不多一个月浅尝NTFS文件系统,
并做了些Everything算法方面的实验,开发了一个简易版 仿Everything搜
索工具。还没写正则和网络部分。

在文件搜索算法速度上不比Everything慢,之所以看上去是一条一条显示,
是因为为了简化显示结果的代码,仅采用了listctrl 的Virtual list。

为了和广大程序开发者多交流,向大家学习,弥补自己的种种不足,我将
自己学习研究,开发出的这份代码公开。

说来惭愧,花了差不多一个多月写出的这份代码参加腾讯公司的校园之星
创新大赛,结果被鄙视了 :-)

程序正式说明如下:

【功能说明】
    相关定义:
        (1)短文件名:全文件名的非路径部分,全文件名的最后一个'/'之后的部分
        (2)主文件名:短文件名的非扩展名部分,不包含扩展名之前的'.'

1.文件名即时搜索,在第一次使用时需要等待程序扫描全盘NTFS卷,以便建立索引文件数据库,在随后使用中无须等待。(也有例外,如果在程序退出后,NTFS卷更改日志过期,仍需要重新扫描数据库才可不漏掉任何文件。Everything的做法是一旦某卷过期,全盘重扫,但是往往用户需要搜索的文件在不重扫时也能找到,本插件在此情况下告诉用户上次保存数据库的日期,让用户判断是否有必要重扫,增强了用户体验)。另外,在程序运行中能对NTFS文件系统的改变进行实时监视,即时显示监视中满足输入条件的文件结果。

2.提供了主文件名搜索框和扩展名搜索框,使得搜索结果更加准确,用户更易于理解如何搜。
例如:如果用户想搜索主文件名中含有proj的文件,Everything搜索中会搜出扩展名部分含有proj的文件;又如用户想搜索含有.m扩展名的文件,但是结果中出现了很多含.m的文件夹。这些都相当不利于用户体验。本程序将此二者分开,两个输入框使用tab建快速切换,相当便捷。

3.主文件名搜索规则多个输入关键词以空格隔开,满足此且运算的文件将会显示在结果中。即结果中的文件必须同时满足所有输入关键词。

4.扩展名搜索规则多个输入扩展名以空格隔开,满足此或运算的扩展名的文件将会显示在结果中。即结果中只会显示扩展名在输入框中出现的文件。另外用户输入扩展名时不会搜索到文件夹。

5.主文件名部分支持通配符? *搜索

6.搜索结果整体按照UNICODE码值排序,对中文部分按照汉语拼音排序。方便用户查找结果。而Everything仅按照UNICODE排序。

7.保留设置字母大小写菜单,增加两个菜单项[搜索文件][搜索文件夹]。
    具体地,
        当两者都勾选,结果中即有文件夹,又有文件;
        当仅勾选[搜索文件]时,结果中不会出现文件夹;
        仅勾选[搜索文件夹]时,结果中不会出现文件。
    另外,点击菜单可即时修改结果页面,相当方便。

8.增加所在目录设置。考虑到用户普遍需求仅搜索某(几)个卷或者某(几)个文件夹下的文件。本程序还考虑了是否包含子目录情形。另外,对所在目录的设置可以即时修改结果页面,操作方便,用户体验效果佳。

9.增加对结果页面按文件大小、文件(夹)日期、文件(夹)属性三种过滤模式。(由于此三类信息都没有在内存中存储,过滤操作较耗时,因此,需要用户点击过滤按钮进行过滤。当含有较多结果时会提示用户是否继续进行过滤)

10.对结果列表的操作,可使用右键弹出文件的系统菜单,可双击文件运行文件。增加选中整行,以便用户查看文件大小等属性信息。增加双击打开所在目录文件夹功能。

11.Everything不支持长文件名,其最长文件名仅支持256字节的UTF8编码文件名。本程序突破了这一限制,能搜索到系统中所有的文件名。

【当前版本与Everything相比未提供的功能】
     1.不支持主文件名正则匹配
     2.主文件名不支持或运算
     3.不支持网络分享

【性能比较】
     1.内存使用
         由于本程序较Everything而言,每个文件多出4字节用户存储文件名ID,是用来支持属性的快速显示和文件过滤功能,再加上改进Everything不支持长文件名的Bug也增加了内存消耗,致使程序内存占用比Everything稍多。

2.数据库容量
         当前版本的文件名数据库容量比Everything大,其原因包括:(1)每个文件多出4字节用户存储文件名ID;(2)改进Everything不支持长文件名的Bug;(3)文件名压缩仅采用了前缀压缩,而未使用bzip2算法进行二次压缩。

3.显示结果速度
         本程序搜索速度和Everything的搜索速度相比不相上下。但是由于本程序中显示结果采用了Owner Data列表控件,而Everything没有使用Owner Data列表控件,致使其显示结果的速度可能较Everything稍慢。显示结果的速度瓶颈在于显示文件的ICON,以及文件的大小、日期、属性,每个文件需要访问磁盘获取相关信息。具体表现于,本程序采用Owner Data列表控件,其效果是搜索结果先完整显示第一个文件的文件名、所在目录、ICON、大小、日期、属性等信息之后再完整显示下一条结果。而Everything的做法是先完整显示 文件名 所在目录 扩展名 3列,然后对其他列一行接一行显示,这样用户看起来觉得Everything搜索更快,实则不然。本程序在显示结果方面,对列表控件的处理有待进一步改进。

这个图片是界面截图,也是【源代码的链接】。

鼠标右键“目标另存为”(而不是“图片另存为”)下载该图片 然后把下载的文件名扩展名从jpg改为rar 打开即可。

转载于:https://www.cnblogs.com/marryZhan/archive/2010/09/19/2213939.html

简陋,山寨,Everything,桌面搜索,原理,源码相关推荐

  1. Android4.3 屏蔽HOME按键返回桌面详解(源码环境下)

    点击打开链接 首先声明我是做系统开发的(高通平台),所以下面介绍的方法并不适合应用开发者. 最经有个需求要屏蔽HOME按键返回桌面并且实现自己的功能,发现以前的方式报错用不了,上网搜索了一下,发现都是 ...

  2. 【Android 逆向】ART 脱壳 ( dex2oat 脱壳 | aosp 中搜索 dex2oat 源码 | dex2oat.cc#main 主函数源码 )

    文章目录 前言 一.搜索 dex2oat 源码 二.dex2oat.cc#main 主函数源码 前言 在 [Android 逆向]ART 脱壳 ( DexClassLoader 脱壳 | exec_u ...

  3. Java Swing图书管理系统桌面软件附源码

    Java Swing图书管理系统桌面软件附源码,亲测可运行. 功能界面如下: 登录界面,默认账号admin密码admin 主功能界面: 添加图书功能界面: 部分源码: 完整源码下载地址: JavaSw ...

  4. k线顶分型 python_顶底分型-(K线分类及顶底分型的一种数学原理 源码 贴图)...

    好股票软件下载网(www.goodgupiao.com)提示:您正在下载的是:顶底分型-(K线分类及顶底分型的一种数学原理 源码 贴图) 参考缠论,研究了很多天终于将顶底分型进行了具体的数学量化,涵盖 ...

  5. 计算机毕业设计Java社交物联网的服务搜索系统(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java社交物联网的服务搜索系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java社交物联网的服务搜索系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目 ...

  6. Unity Fog 原理 源码分析 案例

    Unity Fog 原理 源码分析 案例 效果图 简述 背景知识 clip空间坐标的范围 d3d (near,0), unity remapping to (0,far) 越靠近相机z值越小 open ...

  7. 分享113个ASP搜索链接源码,总有一款适合您

    分享113个ASP搜索链接源码,总有一款适合您 113个ASP搜索链接源码下载链接:https://pan.baidu.com/s/10ElQPz133l08ulhz4DyMaw?pwd=jprp  ...

  8. Delaunay 三角剖分3D(原理 + 源码)

    文章目录 Delaunay 三角剖分 二维与三维的区别 代码实现< Python版本 > 代码实现< Matlab 版本 > Delaunay 三角剖分 原理部分请参照我的上一 ...

  9. 分享111个ASP搜索链接源码,总有一款适合您

    分享111个ASP搜索链接源码,总有一款适合您 111个ASP搜索链接源码下载链接:https://pan.baidu.com/s/1ZPRxwoPR0eR5qcC06grvZg?pwd=545u  ...

最新文章

  1. 用VS(c#)创建、调试windows service以及部署卸载
  2. gpg keys for php 5.5,Fedora解决/etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-x86_64问题
  3. 用MS SQL Reporting Services生成报表
  4. System.gc()调用 - 适用的场景
  5. android Handler的使用(一)
  6. live555 windows下编译以及修订
  7. 计算机与打印机整体方案,打印机的一些使用方案
  8. [USACO17FEB] Why Did the Cow Cross the Road I P (树状数组求逆序对 易错题)
  9. NYOJ-聪明的kk(dp)
  10. getAttribute 与getParmeter 区别
  11. 全网首发:制作LINUX安装软件包,要处理哪些系统目录和文件(1)
  12. 来自联通302的问候
  13. 【优化算法】多目标水循环算法(MOWCA)【含Matlab源码 1433期】
  14. Asp 解析 XML并分页显示
  15. 360锁屏壁纸在哪个文件夹
  16. AST实战技巧|使用v神插件动态替换AST还原后的代码
  17. 2023王道计算机408领学班
  18. datax——全量、增量同步
  19. 再访洪小文:AI,誓不作恶
  20. 什么是VLAN?为什么要划分VLAN?

热门文章

  1. python递归列文件_python-Bash:从最大列递归地向文件写入一行
  2. 支付宝支付回调是什么意思_支付宝邮箱是什么
  3. java jsp中控件绑定_jsp页面常用控件
  4. python批量复制文件问题,python 批量复制不同目录下的文件
  5. case when mysql_mysql条件语句case when的实例
  6. 是不是一个东西_迷你世界:一个金币就能买到稀有武器?这么良心的售货机在哪领...
  7. fillna函数_听说这些pandas函数,是数据科学家和软件工程师的最爱
  8. c语言调用tensorflow模型,C++调用Python中的Tensorflow模型
  9. php+摩尔斯电码,PHP摩尔斯电码转换器
  10. TIOBE 6月编程语言榜单:C语言继续占据第一