2010-08-05 59 views
6

我的應用程序在其數據庫中包含文檔。在這種情況下,用戶可以打開文檔,文檔被保存到臨時文件夾並在用戶的計算機上打開。德爾福通知當文件得到更新

我希望在這些臨時文件之一發生更改時收到通知,並提供用戶將更改後的文檔保存回數據庫。

Delphi7中最簡單的方法是什麼? (我想它需要一些shell魔法或第三方組件)

謝謝!

+0

哪裏文件加載? TRichEdit? TMemo? – zz1433 2010-08-05 19:49:23

+0

Microsoft Excel – Steve 2010-08-08 18:51:54

回答

4

您可以:

  1. 使用Win32 API函數SHChangeNotifyRegister看在臨時文件夾的變化,再有回調檢查,如果您的臨時文件報告的變化。

  2. 既然您知道確切文件您感興趣,您可以使用FindFirstFile在計時器或線程中直接手動監視它們的大小和時間戳更改。

8

您可以使用JEDI JVCL集合中的TJvChangeNotify組件檢測臨時文件(或任何文件)中的更改。

+3

我更喜歡不使用任何JVCL組件,因爲我發現它們是有問題的。不要談論必須安裝gazilion組件,只需要有一個你真正需要的組件... – Steve 2010-08-08 12:08:19

4

除了什麼RRuzRemy Lebeau寫道:

注意TJvChangeNotifyJvChangeNotify單元利用了FindFirstChangeNotification API調用的; this是MSDN文檔。請注意,它有點違反直覺:請參閱下面提到的有關如何在while循環內使用它的線程。

也有ReadDirectoryChanges API調用,這是不被包裹JCL/JVCL,並且具有MSDN文檔here並有一個Delphi win32 example爲好。

This thread解釋了兩個API調用之間的區別。

--jeroen

+0

感謝您的信息,也要檢查這些。 – Steve 2010-08-08 12:07:27

2
+0

請注意,該庫中存在一個錯誤。您需要在TDirWatchThread.Execute中添加Terminate(在SignalError(ErrorMessage)之後) - 如果沒有它,當您從文件夾中刪除所有文件時,會進入無限循環,然後是文件夾本身!重現此錯誤的步驟:創建文件夾,監視文件夾,將文件放入文件夾,刪除文件夾中的所有文件,刪除文件夾,應用程序凍結 – Ampere 2017-04-22 10:31:31