2010-08-05 57 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