Everything是个十分方便的本地文件搜索软件,谁用谁知道...一般每次启动后,它会有个初始化时间,初始化完成后,每次搜索,结果秒出。
有一篇文章是讲Everything实现原理的,详情猛戳此处
大体意思是,ntfs磁盘分区会有一个觉usn的日志系统,从这个日志系统中可以拿到类似全盘索引之类的数据,然后搜索时从这个数据格式出发,效率会比较高。但有个致命点是fat32格式的分区并没有这个usn系统,而且usn系统会返回所有相关的文件信息,不灵活。我的分区全是ntfs的,没有测试everything是否支持fat32,我想应该也是支持的,不过关对于fat32,Everything应该是使用了其他的方案。
起始基于初始化+N次搜索的思想,完全可以不实用usn这个东西。在第一次启动的时候,做一次全盘扫描,建立全盘文件索引到数据库。之后开一个线程监控磁盘,当发生文件的增加、修改、删除时,同步到数据库中。在每次搜索时,从数据库中查找,也是可以的。这样就不必要求磁盘必须是usn的。另外,可以灵活的选择需要哪些文件信息。
下面先使用python实现了这个思想,数据库使用的sqlite3,暂时没有开监控线程。数据库暂时没有优化。
#coding=utf-8
import os
import sqlite3
import time
#全局变量,记录文件数目
global file_number