桌面搜尋 目錄監控

2021-06-15 18:37:14 字數 1336 閱讀 8773

對於桌面搜尋來說,需要隨時觀察硬碟的中檔案是否有變化,對於新增的檔案要新增索引,對於刪除的檔案要刪除相應的索引,對於修改,重新命名等也需要做相應的處理,這樣才能保證我們的桌面搜尋引擎總是能夠搜尋到最新最全的硬碟中的資訊。

對於windows作業系統,監控目錄的方法一般有下面這些:

1.檔案同步

至於改進的辦法,我想可以從2方面來進行。

乙個是降低遍歷執行緒的優先順序,就是花更多的時間遍歷,但是不影響系統別的進行的執行,現在我一遍歷,硬碟就嗞嗞做響。

另外乙個方法是只遍歷關心的檔案,由於桌面搜尋只是對部分格式的檔案做全文檢索,其他只要檢索檔名就可以了。所以我們在遍歷是只搜尋特殊字尾的檔案,不過這個可能對效能的提高不會有太多的影響。

2.虛擬裝置驅動(vxd)程式設計

裝置驅動程式設計是指讓工作於系統核心態的驅動程式去攔截所有的檔案訪問。這種方法時時性高,但是風險很大,由於裝置驅動程式設計需要進入ring0許可權,所以將很容易導致藍屏宕機(bsod),ring0下的異常將往往導致系統崩潰,因為它對於系統總是被信任的,所以沒有相應處理**去捕獲這個異常。另外實現相對複雜很多,所以除了防毒軟體採用這種方式以外,其他很少有用到這種方式監控目錄的。

3.windows api

windows api方式主要採用windows提供的api介面來完成對目錄的監控,實現相對簡單。我們的桌面搜尋引擎也準備採用這種模式來實現。

windows裡面對目錄、檔案監控提供了兩個api,它們分別是:findfirstchangenotification和readdirectorychangesw。這兩個api都可以對目錄進行時時監控。

但是非常不幸的,他們都有自己的缺點(要是沒有缺點的話防毒軟體也不會費那麼大力,冒那麼大風險用裝置驅動程式設計方式了)。首先說findfirstchangenotification,這個api最大的問題是告訴你了某個目錄有變化,但是卻不告訴你變化在**,簡直是讓人**。在桌面搜尋中,一般是對系統的分割槽進行監控的,你告訴我c:發生了變化,其實一點用都沒有,我還是要把c:全部搜尋一遍。當然findfirstchangenotification也可以不對子目錄進行監控,我測試了一下,對6000多個目錄全部建立的監控(當然是乙個執行緒),結果發現監控失敗,最終測試結果是findfirstchangenotification最多隻支援監控64個目錄。所以只好放棄了。

readdirectorychangesw到是對上面的這些非常支援,簡直說是完美無缺,不僅告訴你哪個檔案改變了,是大小改變還是被修改或者建立刪除重新命名都給你分的輕輕楚楚,但是只支援2000及以上的windows版本。真是無奈啊,所以我們的桌面搜尋引擎只好只支援2000及以上版本了。

最後,我覺得第一種方法雖然速度慢,但是還有改進的餘地,如果有時間的話我會再嘗試的。如果大家有什麼好的方法,也希望多多指教。

目錄監控類

m hdir,m pbuf,bufsize,true,file notify change file name file notify change last write file notify change creation file notify change size,dwbytesretur...

inotifywait實現目錄監控

分類 linux程式設計 作業系統 2012 11 15 22 09 3230人閱讀收藏 舉報傳統的rsync crontab同步資料和實際會有差異,而inotify則基本可以達到實時的效果,當檔案有任何變動,就會觸發inotify。inotifywait 和 inotifywatch。inotif...

Flume ng spoolDir目錄監控踩過的坑

使用flume ng1.6 spooldir收集日誌遇到的問題 title checkfilecpisover description 用來檢查檔案拷貝是否完成 param param currentfile 設定檔案 return void 返回型別 throws private void che...