Everything是如何搜索的
生活随笔
收集整理的這篇文章主要介紹了
Everything是如何搜索的
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
寫在前面
使用了Everything之后,一直對他的搜索速度感興趣,在網上也看了很多對其原理的揭秘,終于有空找了個源碼研究了一下,原理就是對NTFS的USN特性進行使用。
原理
詳細解釋我參照別人家的博客來一段:
當扇區的文件有變化時,操作系統會往USN Journal文件中追加一條記錄,該記錄包含文件名、變化發生的時間、變化的原因等信息,而不包含變化的內容。每一條記錄用一個64位數字標識,稱作USN(UpdateSequence Number)。微軟用每一條記錄在日志文件中的偏移作為該記錄的USN,這樣可以快速地通過USN獲取到對應的記錄。顯而易見,USN是遞增的,但是不連續。
所以如果想獲得磁盤的文件只需要讀取日志即可。
網上的源碼有很多,關于讀取日志,從日志轉換成完整路徑都不難理解,如果想自己寫一個也是可以的。
問題
我認為需要考慮的主要問題:
1. 從上次讀取的位置繼續讀取;
2. 新增或刪除文件處理。
Everything 源碼超級簡述
源碼仔細看并不難理解。
UsnOperator 類中,我認為比較重要的一點,是如何繼續讀取
使用 FileSystemWatcher 監聽文件變化
關于電腦文件的修改監聽,C#有相應的類來處理,非常方便,感興趣可深挖:
FileSystemWatcher _watcher = new FileSystemWatcher(@"J:\", "*.*"); _watcher.Created += new FileSystemEventHandler(OnProcess); _watcher.Changed += new FileSystemEventHandler(OnProcess); _watcher.Deleted += new FileSystemEventHandler(OnProcess); _watcher.Renamed += new RenamedEventHandler(OnFileRenamed); _watcher.IncludeSubdirectories = true; _watcher.EnableRaisingEvents = true;下載
Everything相關資料下載
參考資料
DeviceIOControl詳解-各個擊破
總結
以上是生活随笔為你收集整理的Everything是如何搜索的的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle 创建表 练习题
- 下一篇: Twitter Storm安装配置(Ub