仿照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也是能实现一些更加复杂的属性搜索。
仿照everything写的一个超级速查 原创的更多相关文章
- 自己写了一个超级简便且傻瓜式的且功能强大的CSV组件(并且代码优雅,绝对没有一行多余的代码)
		
github地址: https://github.com/yangfeixxx/chipsCSV.git 解决的问题:解决了传统的CSV工具类对于实体类无法自动化封装为带表头的CSV文件的痛点,在读取 ...
 - 这两天自己模仿写的一个Asp.Net的显示分页方法 附加实体转换和存储过程
		
之前自己一直用Aspnetpager控件来显示项目中的分页,但是每次都要拖一个aspnetpager的控件进去,感觉很不舒服,因为现在自己写的webform都不用服务器控件了,所以自己仿照aspnet ...
 - 写shell脚本速查笔记
		
linux shell脚本的语法蛋疼,而且对于java开发人员来说又不常用,常常是学了一次等到下次用的时候又忘记了.因此制作这个速查笔记,用于要写shell脚本时快速回忆&速查. 获取当前脚本 ...
 - 自己写的一个Solr搜索实例,增删改查+高亮+分页
		
今天个人coding的模块测试,所以闲暇之余继续研究solr,然后顺带写了一个实例,随便搞的,solr真心不熟,期待认识热爱搜索的朋友,共同进步. 1.配置schema.xml文件[solr\coll ...
 - liunx速查
		
文件和目录 Linux 主要目录速查表 /:根目录,一般根目录下只存放目录,在 linux 下有且只有一个根目录,所有的东西都是从这里开始 当在终端里输入 /home,其实是在告诉电脑,先从 /(根目 ...
 - LINUX SHELL脚本攻略笔记[速查]
		
Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述 ...
 - Java API 快速速查宝典
		
Java API 快速速查宝典 作者:明日科技,陈丹丹,李银龙,王国辉 著 出版社:人民邮电出版社 出版时间:2012年5月 Java编程的最基本要素是方法.属性和事件,掌握这些要素,就掌握了解决实际 ...
 - Redis常用命令速查 02_转
		
一.Key Key命令速查: 命令 说明 DEL 删除给定的一个或多个 key,不存在的 key 会被忽略,返回值:被删除 key 的数量 DUMP 序列化给定 key,返回被序列化的值,使用 RES ...
 - selenium 速查手册 python版
		
1.安装与配置 pip install selenium 基本使用selenium都是为了动态加载网页内容用于爬虫,所以一般也会用到phantomjs mac下如果要配置phantomjs环境的话 e ...
 
随机推荐
- Qt 学习之路 2(22):事件总结
			
Qt 学习之路 2(22):事件总结 豆子 2012年10月16日 Qt 学习之路 2 47条评论 Qt 的事件是整个 Qt 框架的核心机制之一,也比较复杂.说它复杂,更多是因为它涉及到的函数众多,而 ...
 - Codeforces Round #334(div.2)(新增不用二分代码) B
			
B. More Cowbell time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
 - django模型层 关于单表的增删改查
			
关于ORM MTV或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库, 通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员 ...
 - 使用 maven 打包 src/test/java下的文件,并用 java jar 跑打包出来的jar
			
https://blog.csdn.net/nba_2011/article/details/71296745
 - PHP任意文件上传漏洞(CVE-2015-2348)
			
安全研究人员今天发布了一个中危漏洞——PHP任意文件上传漏洞(CVE-2015-2348). 在上传文件的时候只判断文件名是合法的文件名就断定这个文件不是恶意文件,这确实会导致其他安全问题.并且在这种 ...
 - java中使用nextLine();   没有输入就自动跳过的问题?
			
[问题分析] 必要的知识:in.nextLine();不能放在in.nextInt();代码段后面否则in.nextLine();会读入"\n"字符,但"\n" ...
 - php rtrim的一个坑,很“二”的问题
			
一.背景: 做项目的时候遇到一种情况,商家的营业时间显示的问题,设计图上要求显示成:“星期一,星期二,星期三,星期四,星期五,星期六,星期天” 换句话说,就是营业星期勾哪个就显示哪个,类似下面这样: ...
 - Hbase 表操作
			
1. list 操作 2. 创建table column family, 3. 插入数据: put 'user' 3. 检索数据: scan table
 - Web 2.0 浏览器端可靠性测试第2部分(如何发现和分析 Web 2.0 浏览器端的内存泄漏)
			
介绍浏览器端的可靠性测试 在上一编文章中我们介绍了浏览器端可靠性测试的概念.测试方法.以及常用的测试和分析工具.我们知道,浏览器端可靠性测试,就是以浏览器为测试平台,通过模拟用户在真实场景下的页面操作 ...
 - js 基础学习笔记(一)
			
javascript基础 .组成部分:由 ECMAScript(翻译,核心,解释器).DOM(操作HTML的能力).BOM(浏览器window)三部分组成. 兼容性依次为 [1.几乎没有兼容性问题.2 ...