2011-04-23 80 views

回答

4

去年我有同樣的需要,並嘗試了Iztok Kacin的目錄觀察:http://www.cromis.net/blog/downloads/directory-watch/。他回覆了電子郵件,對回答我的問題非常有幫助。

他的代碼工作,但我需要的時刻被通知的文件中的特定文件夾中關閉,這對於微軟一些奇怪的原因,ReadDirectoryChanges API(它依賴)(令人惱火)沒有按」提供。我似乎也記得Iztok的代碼使用了線程,並且沒有足夠的輕量級來滿足我的需求。

我最終使用了一種令人驚訝的簡單方法,它對我來說非常有效。在每隔幾秒鐘觸發的TTimer事件中,我在我正在監視的文件夾上使用FindFirst。所有找到的文件都放在一個持久的TStringList中。任何發現的文件都不在以前的TTimer事件的StringList中。 (要檢測一個文件是否關閉,我嘗試以獨佔模式打開該文件,如果我無法打開它,則不會將它添加到TStringList,因此它會在下一個事件中進行檢查。)

我很安靜猶豫使用這種方法,認爲這太蠻力。但是,爲了滿足我的需求,這個解決方案出色地完成了,並且非常幸運,只涉及少量非常簡單的代碼,這些代碼很容易理解和維護。

HTH

+0

爲什麼有人在我的答案上面投了票? – RobertFrank 2011-04-24 13:20:05

+0

誰知道?......實際上這很煩人。由於解決方案有效,所以需要+1進行補償 – yms 2011-05-03 00:00:33

+0

請注意,該庫存在一個小錯誤。您需要在TDirWatchThread.Execute中添加Terminate(在SignalError(ErrorMessage)之後) - 如果沒有它,當您從文件夾中刪除所有文件時,會進入無限循環,然後是文件夾本身! – Ampere 2017-04-22 10:30:49