简陋,山寨,Everything,桌面搜索,原理,源码
出處:http://hi.baidu.com/chenxiong0115/blog/item/b31e573a3d8bd6e715cecbb6.html
? 前些時間對Everything很感興趣,花了差不多一個月淺嘗NTFS文件系統,
并做了些Everything算法方面的實驗,開發了一個簡易版 仿Everything搜
索工具。還沒寫正則和網絡部分。
??? 在文件搜索算法速度上不比Everything慢,之所以看上去是一條一條顯示,
是因為為了簡化顯示結果的代碼,僅采用了listctrl 的Virtual list。
??? 為了和廣大程序開發者多交流,向大家學習,彌補自己的種種不足,我將
自己學習研究,開發出的這份代碼公開。
??? 說來慚愧,花了差不多一個多月寫出的這份代碼參加騰訊公司的校園之星
創新大賽,結果被鄙視了 :-)
??? 程序正式說明如下:
【功能說明】
??? 相關定義:
??????? (1)短文件名:全文件名的非路徑部分,全文件名的最后一個'/'之后的部分
??????? (2)主文件名:短文件名的非擴展名部分,不包含擴展名之前的'.'
??? 1.文件名即時搜索,在第一次使用時需要等待程序掃描全盤NTFS卷,以便建立索引文件數據庫,在隨后使用中無須等待。(也有例外,如果在程序退出后,NTFS卷更改日志過期,仍需要重新掃描數據庫才可不漏掉任何文件。Everything的做法是一旦某卷過期,全盤重掃,但是往往用戶需要搜索的文件在不重掃時也能找到,本插件在此情況下告訴用戶上次保存數據庫的日期,讓用戶判斷是否有必要重掃,增強了用戶體驗)。另外,在程序運行中能對NTFS文件系統的改變進行實時監視,即時顯示監視中滿足輸入條件的文件結果。
??? 2.提供了主文件名搜索框和擴展名搜索框,使得搜索結果更加準確,用戶更易于理解如何搜。
例如:如果用戶想搜索主文件名中含有proj的文件,Everything搜索中會搜出擴展名部分含有proj的文件;又如用戶想搜索含有.m擴展名的文件,但是結果中出現了很多含.m的文件夾。這些都相當不利于用戶體驗。本程序將此二者分開,兩個輸入框使用tab建快速切換,相當便捷。
??? 3.主文件名搜索規則多個輸入關鍵詞以空格隔開,滿足此且運算的文件將會顯示在結果中。即結果中的文件必須同時滿足所有輸入關鍵詞。
??? 4.擴展名搜索規則多個輸入擴展名以空格隔開,滿足此或運算的擴展名的文件將會顯示在結果中。即結果中只會顯示擴展名在輸入框中出現的文件。另外用戶輸入擴展名時不會搜索到文件夾。
??? 5.主文件名部分支持通配符? *搜索
??? 6.搜索結果整體按照UNICODE碼值排序,對中文部分按照漢語拼音排序。方便用戶查找結果。而Everything僅按照UNICODE排序。
??? 7.保留設置字母大小寫菜單,增加兩個菜單項[搜索文件][搜索文件夾]。
??? 具體地,
??????? 當兩者都勾選,結果中即有文件夾,又有文件;
??????? 當僅勾選[搜索文件]時,結果中不會出現文件夾;
??????? 僅勾選[搜索文件夾]時,結果中不會出現文件。
??? 另外,點擊菜單可即時修改結果頁面,相當方便。
??? 8.增加所在目錄設置。考慮到用戶普遍需求僅搜索某(幾)個卷或者某(幾)個文件夾下的文件。本程序還考慮了是否包含子目錄情形。另外,對所在目錄的設置可以即時修改結果頁面,操作方便,用戶體驗效果佳。
??? 9.增加對結果頁面按文件大小、文件(夾)日期、文件(夾)屬性三種過濾模式。(由于此三類信息都沒有在內存中存儲,過濾操作較耗時,因此,需要用戶點擊過濾按鈕進行過濾。當含有較多結果時會提示用戶是否繼續進行過濾)
??? 10.對結果列表的操作,可使用右鍵彈出文件的系統菜單,可雙擊文件運行文件。增加選中整行,以便用戶查看文件大小等屬性信息。增加雙擊打開所在目錄文件夾功能。
??? 11.Everything不支持長文件名,其最長文件名僅支持256字節的UTF8編碼文件名。本程序突破了這一限制,能搜索到系統中所有的文件名。
?
【當前版本與Everything相比未提供的功能】
???? 1.不支持主文件名正則匹配
???? 2.主文件名不支持或運算
???? 3.不支持網絡分享
【性能比較】
???? 1.內存使用
???????? 由于本程序較Everything而言,每個文件多出4字節用戶存儲文件名ID,是用來支持屬性的快速顯示和文件過濾功能,再加上改進Everything不支持長文件名的Bug也增加了內存消耗,致使程序內存占用比Everything稍多。
???? 2.數據庫容量
???????? 當前版本的文件名數據庫容量比Everything大,其原因包括:(1)每個文件多出4字節用戶存儲文件名ID;(2)改進Everything不支持長文件名的Bug;(3)文件名壓縮僅采用了前綴壓縮,而未使用bzip2算法進行二次壓縮。
???? 3.顯示結果速度
???????? 本程序搜索速度和Everything的搜索速度相比不相上下。但是由于本程序中顯示結果采用了Owner Data列表控件,而Everything沒有使用Owner Data列表控件,致使其顯示結果的速度可能較Everything稍慢。顯示結果的速度瓶頸在于顯示文件的ICON,以及文件的大小、日期、屬性,每個文件需要訪問磁盤獲取相關信息。具體表現于,本程序采用Owner Data列表控件,其效果是搜索結果先完整顯示第一個文件的文件名、所在目錄、ICON、大小、日期、屬性等信息之后再完整顯示下一條結果。而Everything的做法是先完整顯示 文件名 所在目錄 擴展名 3列,然后對其他列一行接一行顯示,這樣用戶看起來覺得Everything搜索更快,實則不然。本程序在顯示結果方面,對列表控件的處理有待進一步改進。
?
?
這個圖片是界面截圖,也是【源代碼的鏈接】。
鼠標右鍵“目標另存為”(而不是“圖片另存為”)下載該圖片 然后把下載的文件名擴展名從jpg改為rar 打開即可。
轉載于:https://www.cnblogs.com/marryZhan/archive/2010/09/19/2213939.html
總結
以上是生活随笔為你收集整理的简陋,山寨,Everything,桌面搜索,原理,源码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eclipse启动出现“An Error
- 下一篇: Linux chmod命令