仿照everything写的一个超级速查 原创

http://files.cnblogs.com/files/jacd/%E8%B6%85%E9%80%9F%E6%9F%A5%E6%96%87%E4%BB%B6.zip

速度奇快无比,体积奇小无比,要代码的留言

附上参考资料

绍:    Everything(官网|中文主页|教程)是速度最快的文件搜索软件。其速度之快令人震惊,百G硬盘几十万个文件,可以在几秒钟之内完成索引;文件名搜索瞬间呈现结果。它小巧免费,支持中文,支持正则表达式,可以通过HTTP或FTP分享搜索结果。如果不满意Windows自带的搜索工具、Total Commander的搜索、Google 桌面搜索或百度硬盘搜索,如果正在使用或放弃了Locate32,都值得推荐这款体积小巧、免安装、免费、速度极快(比Locate32更快)的文件搜索工具Everything!

但注意如下几点: - 只搜索文件名,不能搜索文件内容; - 只适用NTFS文件系统,不适合FAT32; - 完美支持中文,但必须使用V1.2.x及更高版本

原理:

根据Everything的官网所说,它1分钟可以索引100万个文件。48万多个文件,建立索引需要的时间也只有几秒,索引无需逐一扫描硬盘文件,而是直接读取NTFS文件系统的USN日志,Everything由于核心原理建立在NTFS的底层机制上,NTFS文件系统中的 USN 日志记录了系统对NTFS分区中的文件所做的所有更改。对于每一卷,NTFS 都使用 USN 日志来跟踪有关添加、删除和修改的文件的信息。直接读取NTFS文件系统的USN日志,是能做到很快的,但就只能按文件名来处理。如果要做内容的索引,那就不是一秒两秒的事了。而且还要考虑文件格式,需要索引的信息等。也就是说你如果需要搜寻你所有的分区,那么你所有的分区都需要时NTFS格式的,这是由软件的工作原理决定的。

二,原理知识

USN日志:

USN是Update Service Number Journal or Change Journal的英文缩写,直译为“更新序列号”,是对NTFS卷里所修改过的信息进行相关记录的功能。当年微软发布Windows 2000时,建立NTFS 5.0的同时,加入了一些新功能和改进了旧版本的文件系统,为它请来了一位可靠的秘书,它可以在分区中设置监视更改的文件和目录的数量,记录下监视对象修改时间和修改内容。没错,它就是USN日志。当这个功能启用时,对于每一个NTFS卷,当发生有关添加、删除和修改文件的信息时,NTFS都使用USN日志记录下来; 这个就是版本管理svn的功能一个子集啊,看来对操作系统实现的理解,对于应用软件的效率有很大帮助;

如何开启:在NTFS分区的图标上右击选择“属性”,勾选允许索引服务;这就带来一个问题:如果没有索引服务,软件是否不能正常运行?

查看方法:

要了解有关变动日志功能的摘要信息,我们只需在命令行下运行“fsutil usn queryjournal DriveDesignator”命令即可,其中DriveDesignator的我们要查询的卷。例如我们要查看C盘的变动日志摘要,可运行命令“fsutil usn queryjournal c:”。

C:\Documents and Settings\zhuyong>fsutil usn queryjournal c: Usn Journal ID   : 0x01c8e96d59876854 First Usn        : 0x00000000ec280000 Next Usn         : 0x00000000f26acf00 Lowest Valid Usn : 0x0000000000000000 Max Usn          : 0x00000fffffff0000 Maximum Size     : 0x0000000006400000 Allocation Delta : 0x0000000000040000

“Usn Journal ID”是USN日志ID,这是该变动日志的唯一标识符。“First Usn”是第一个USN,这是日志中的第一个USN。“Next Usn”是下一个USN,这时变动日志下一个可以被写入的USN。“Lowest Valid Usn”是最低有效USN,这是可以被写入变动日志的最低有效USN。“Max Usn”是最大USN,这是可以被分配的最大USN。“Maximum Size ”是最大值,这是变动日志可以使用的字节最大值,如果变动日志超过该值,以前的项目就会被覆盖。“Allocation Delta”是分配差,这是当变动日志装满后,可以被添加到日志的末尾,或者从日志的开头处删除的,被分配的内容空间大小。从这块理解:USN日志的实现是一个限定最大长度和最大空间的链表,所以可能是不完整的?

假如我们要了解某个文件最新的变动日志项,只需在命令行下执行命令“fsutil usn readdate filepath”即可,其中filepath是要查看变动信息的文件的路径和名称。命令的输出结果如下: C:\>fsutil usn readdata C:\\DFATable.txt

Major Version    : 0x2 Minor Version    : 0x0 FileRef#         : 0x0095000000018bac Parent FileRef#  : 0x0005000000000005 Usn              : 0x00000000d8bcd058 Time Stamp       : 0x0000000000000000 0:00:00 1601-1-1 Reason           : 0x0 Source Info      : 0x0 Security Id      : 0x173 File Attributes  : 0x20 File Name Length : 0x18 File Name Offset : 0x3c FileName         : DFATable.txt

这些数据的开始位置显示了该文件在根文件索引中的索引编号以及父项,同时还显示了该文件当前的USN已经文件属性标记。所有这些有关该文件的最新变动日志,方便了特定的系统服务直接查询,以判断对文件的修改情况,不仅速度更快,而且对系统资源是使用也更高效。看来利用USA也是能实现一些更加复杂的属性搜索。

时间: 2024-10-12 05:11:04

仿照everything写的一个超级速查 原创的相关文章

这两天自己模仿写的一个Asp.Net的显示分页方法 附加实体转换和存储过程

之前自己一直用Aspnetpager控件来显示项目中的分页,但是每次都要拖一个aspnetpager的控件进去,感觉很不舒服,因为现在自己写的webform都不用服务器控件了,所以自己仿照aspnetpager写了一个精简实用的返回分页显示的html方法,其他话不说了,直接上代码. 分页显示信息的实体类:  public class Pager    {        private string _firstPageText;        /// <summary>        ///

LINUX SHELL脚本攻略笔记[速查]

Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述符和重定向 cat 数组和关联数组 alias date 调试脚本 函数和参数 管道 读取命令输出 read 字段分隔符和迭代器 循环 比较和测试 find xargs tr md5sum sha1sum 对目录进行校验 sort uniq tempfile split bash变量匹配切分 exp

常用的OpenCV函数速查

常用的OpenCV函数速查 1.cvLoadImage:将图像文件加载至内存: 2.cvNamedWindow:在屏幕上创建一个窗口: 3.cvShowImage:在一个已创建好的窗口中显示图像: 4.cvWaitKey:使程序暂停,等待用户触发一个按键操作: 5.cvReleaseImage:释放图像文件所分配的内存: 6.cvDestroyWindow:销毁显示图像文件的窗口: 7.cvCreateFileCapture:通过参数设置确定要读入的AVI文件: 8.cvQueryFrame:用

正则速查

感觉每次用正则都很纠结.每次都查. 还是用的少. 整个速查表好了. 表1.常用的元字符 代码 说明 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 表2.常用的限定符 代码/语法 说明 * 重复零次或更多次 + 重复一次或更多次 ? 重复零次或一次 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n到m次 分支|:匹配分支条件时,将会从左到右地测试每个

sqlmap 命令详解(自备速查)

sqlmap速查 /pentest/database/sqlmap/txt/ common-columns.txt 字段字典 common-outputs.txt common-tables.txt 表字典 keywords.txt oracle-default-passwords.txt user-agents.txt wordlist.txt 常用语句: 1.使用POST方法提交 sqlmap.py -u "http://192.168.1.1/sqlmap/oracle/post_int.

Git命令速查

总结下Git的常用命令,方便查看一.常用命令1.创建一个新的repository:先在github上创建并写好相关名字,描述.$cd ~/hello-world //到hello-world目录$git init //初始化$git add . //把所有文件加入到索引(不想把所有文件加入,可以用gitignore或add 具体文件)$git commit //提交到本地仓库,然后会填写更新日志( -m “更新日志”也可)$git remote add origin [email protect

Redis常用命令速查 02_转

一.Key Key命令速查: 命令 说明 DEL 删除给定的一个或多个 key,不存在的 key 会被忽略,返回值:被删除 key 的数量 DUMP 序列化给定 key,返回被序列化的值,使用 RESTORE 命令可以将这个值反序列化为 Redis 键 EXISTS 检查给定 key 是否存在 EXPIRE 为给定key设置有效时间,接受时间点 EXPIREAT 为给定key设置有效时间,接受时间戳timestamp KEYS 查找所有符合给定模式 pattern 的 key:KEYS * 匹配

测试启发法速查表

本文是测试大师Elisabeth Hendrickson的测试启发法速查表. 一.通用启发法 这些启发法绝对适用于任何种类的接口和任何种类的系统. 抽象 剔除模型中的细节.忽略低层级的细枝末节,以此进行简化,让模型可以更少地关注具体细节,而更多地聚焦与概念层面. 例如,对于交互图来说,无需详尽地描述一组通信,你也可以只画一条线,再取个名字来描述这些通信的核心交互即可.如果是在测试邮件客户端,那么在发送邮件时客户端可能要经历如下步骤:连接到服务器.鉴权.传输数据.与其在模型中记录所有步骤,你可以直

Redis常用命令速查 &lt;第二篇&gt;

一.Key Key命令速查: 命令 说明 DEL 删除给定的一个或多个 key,不存在的 key 会被忽略,返回值:被删除 key 的数量 DUMP 序列化给定 key,返回被序列化的值,使用 RESTORE 命令可以将这个值反序列化为 Redis 键 EXISTS 检查给定 key 是否存在 EXPIRE 为给定key设置有效时间,接受时间点 EXPIREAT 为给定key设置有效时间,接受时间戳timestamp KEYS 查找所有符合给定模式 pattern 的 key:KEYS * 匹配