简陋,山寨,Everything,桌面搜索,原理,源码

转载 2016年08月30日 15:06:34

  前些时间对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 打开即可。

相关文章推荐

Everything原理(部分)

我在第一次使用 Everything 时,对其速度确实感到惊讶,后来了解到是通过操作 USN 实现的,并且有一定的局限性(只有 NTFS 下才能使用)。   近来清闲无事(失业了),搞些自己的小项...

文件搜索工具—everything,相关原理

如果觉得我的技术文章还有点让列为看官汲取之处,请给我投上宝贵的一篇,以兹鼓励呵,多谢,多谢!!本人ID:m13666368773投票地址:http://vote.blog.csdn.net/item/...

Everything实现原理

一、USN Journal及MFT原理 everything搜索文件的速度之所以快得令人愤怒,主要原因是利用了NTFS的USNJournal特性,直接从系统的主文件表里读取文件信息。       ...
  • kaooo
  • kaooo
  • 2012-12-15 11:35
  • 2160

Everything原理及全盘搜索研究

Everything是个十分方便的本地文件搜索软件,谁用谁知道...一般每次启动后,它会有个初始化时间,初始化完成后,每次搜索,结果秒出。 有一篇文章是讲Everything实现原理的,详情猛戳此处...

简陋,山寨,Everything,桌面搜索,原理,源码

出处:http://hi.baidu.com/chenxiong0115/blog/item/b31e573a3d8bd6e715cecbb6.html  前些时间对Everything很感兴趣,花了...
  • problc
  • problc
  • 2010-09-19 10:58
  • 5201

NTFS文件系统USN日志

USN是Update Service Number Journal or Change Journal的英文缩写,直译为“更新序列号”,是对NTFS卷里所修改过的信息进行相关记录的功能。当年微软发布...
  • sdd701
  • sdd701
  • 2010-10-28 09:05
  • 5694
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)