仿照everything寫的一個超級速查 原創

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

速度奇快無比,體積奇小無比,要代碼的留言svn

 

附上參考資料工具

紹:    Everything(官網|中文主頁|教程)是速度最快的文件搜索軟件。其速度之快使人震驚,百G硬盤幾十萬個文件,能夠在幾秒鐘以內完成索引;文件名搜索瞬間呈現結果。它小巧免費,支持中文,支持正則表達式,能夠經過HTTP或FTP分享搜索結果。若是不滿意Windows自帶的搜索工具、Total Commander的搜索、Google 桌面搜索或百度硬盤搜索,若是正在使用或放棄了Locate32,都值得推薦這款體積小巧、免安裝、免費、速度極快(比Locate32更快)的文件搜索工具Everything!spa

但注意以下幾點: - 只搜索文件名,不能搜索文件內容; - 只適用NTFS文件系統,不適合FAT32; - 完美支持中文,但必須使用V1.2.x及更高版本操作系統

 

原理:命令行

    根據Everything的官網所說,它1分鐘能夠索引100萬個文件。48萬多個文件,創建索引須要的時間也只有幾秒,索引無需逐一掃描硬盤文件,而是直接讀取NTFS文件系統的USN日誌,Everything因爲核心原理創建在NTFS的底層機制上,NTFS文件系統中的 USN 日誌記錄了系統對NTFS分區中的文件所作的全部更改。對於每一卷,NTFS 都使用 USN 日誌來跟蹤有關添加、刪除和修改的文件的信息。直接讀取NTFS文件系統的USN日誌,是能作到很快的,但就只能按文件名來處理。若是要作內容的索引,那就不是一秒兩秒的事了。並且還要考慮文件格式,須要索引的信息等。也就是說你若是須要搜尋你全部的分區,那麼你全部的分區都須要時NTFS格式的,這是由軟件的工做原理決定的。日誌

二,原理知識對象

USN日誌:blog

   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也是能實現一些更加複雜的屬性搜索。

相關文章
相關標籤/搜索