我的應用程序在其數據庫中包含文檔。在這種情況下,用戶可以打開文檔,文檔被保存到臨時文件夾並在用戶的計算機上打開。德爾福通知當文件得到更新
我希望在這些臨時文件之一發生更改時收到通知,並提供用戶將更改後的文檔保存回數據庫。
Delphi7中最簡單的方法是什麼? (我想它需要一些shell魔法或第三方組件)
謝謝!
我的應用程序在其數據庫中包含文檔。在這種情況下,用戶可以打開文檔,文檔被保存到臨時文件夾並在用戶的計算機上打開。德爾福通知當文件得到更新
我希望在這些臨時文件之一發生更改時收到通知,並提供用戶將更改後的文檔保存回數據庫。
Delphi7中最簡單的方法是什麼? (我想它需要一些shell魔法或第三方組件)
謝謝!
您可以:
使用Win32 API函數SHChangeNotifyRegister看在臨時文件夾的變化,再有回調檢查,如果您的臨時文件報告的變化。
既然您知道確切文件您感興趣,您可以使用FindFirstFile在計時器或線程中直接手動監視它們的大小和時間戳更改。
您可以使用JEDI JVCL集合中的TJvChangeNotify
組件檢測臨時文件(或任何文件)中的更改。
我更喜歡不使用任何JVCL組件,因爲我發現它們是有問題的。不要談論必須安裝gazilion組件,只需要有一個你真正需要的組件... – Steve 2010-08-08 12:08:19
除了什麼RRuz和Remy Lebeau寫道:
注意TJvChangeNotify
在JvChangeNotify
單元利用了FindFirstChangeNotification
API調用的; this是MSDN文檔。請注意,它有點違反直覺:請參閱下面提到的有關如何在while循環內使用它的線程。
也有ReadDirectoryChanges
API調用,這是不被包裹JCL/JVCL,並且具有MSDN文檔here並有一個Delphi win32 example爲好。
This thread解釋了兩個API調用之間的區別。
--jeroen
感謝您的信息,也要檢查這些。 – Steve 2010-08-08 12:07:27
也看看這個:http://www.cromis.net/blog/downloads/directory-watch/和How to monitoring directory for files in Delphi XE?
請注意,該庫中存在一個錯誤。您需要在TDirWatchThread.Execute中添加Terminate(在SignalError(ErrorMessage)之後) - 如果沒有它,當您從文件夾中刪除所有文件時,會進入無限循環,然後是文件夾本身!重現此錯誤的步驟:創建文件夾,監視文件夾,將文件放入文件夾,刪除文件夾中的所有文件,刪除文件夾,應用程序凍結 – Ampere 2017-04-22 10:31:31
哪裏文件加載? TRichEdit? TMemo? – zz1433 2010-08-05 19:49:23
Microsoft Excel – Steve 2010-08-08 18:51:54