仿照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 ...
随机推荐
- Python-5-字符串方法
center >>> "The Middle by Jimmy Eat World".center(39) ' The Middle by Jimmy E ...
- Mysql-proxy代理内网数据库
Mysql-proxy 参考:https://segmentfault.com/q/1010000000394160 情景分析:首先您需要正在使用UCloud云主机(uhoust)以及云数据库(udb ...
- newCachedThreadPool无上限线程池使用
1. newCachedThreadPool无上限线程池, 动态根据代码添加线程, 如果线程空闲60秒没有被使用,会自动关闭 package ThreadTest; import java.u ...
- python3 + pycharm+requests+HTMLTestRunner接口自动化测试步骤
1.python3 环境的搭建,pycharm安装 2.想要用requests做自动化接口测试,那么就得先安装requests这个第三方库,在命令窗口执行 pip install requests 3 ...
- daterangepicker-双日历
js脚本和css样式,到bootstrap官网去下载 <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml&qu ...
- 阿里插件检查 lombok报错---方法缺少 '@Override' 注解
问题: Eclipse里,阿里编码规约插件扫描代码出现,但是idea却没有. 解决: 将以上注解改成 @Setter @Getter @NoArgsConstructor @AllArgsConstr ...
- php rtrim的一个坑,很“二”的问题
一.背景: 做项目的时候遇到一种情况,商家的营业时间显示的问题,设计图上要求显示成:“星期一,星期二,星期三,星期四,星期五,星期六,星期天” 换句话说,就是营业星期勾哪个就显示哪个,类似下面这样: ...
- Zookeeper---初识
1.Zookeeper是 Apache开源 的 分布式应用程序 服务治理: 在分布式环境中 协调和管理服务 是一个复杂的过程: ZooKeeper通过其简单的架构和API解决了这个问题: Zo ...
- [转]jQuery AJAX pagination plugin with ASP.NET Server Side
本文转自:http://do-web.com/jpaging/usage How does it work? 1. In order to implement the plugin, you need ...
- Kudu-Master的设计
不多说,直接上干货! http://blog.csdn.net/lookqlp/article/details/70858466