我的应用程序在其数据库中包含文档。用户可以打开文档,在这种情况下,文档将保存到临时文件夹并在用户的计算机上打开。
我希望在这些临时文件之一发生更改时收到通知,并让用户将更改后的文档保存回数据库。
在 Delphi7 中最简单的方法是什么? (我想它需要一些 shell 魔法或第 3 方组件)
谢谢!
您可以:
使用 Win32 API SHChangeNotifyRegister 函数来监视临时文件夹中的更改,然后让回调检查临时文件是否正在报告更改。
由于您知道您感兴趣的确切文件,因此您可以在计时器或线程中使用 FindFirstFile 直接手动监控它们的大小和时间戳变化。
除了RRuz和Remy Lebeau所写:
请注意,
TJvChangeNotify
单元中的 JvChangeNotify
使用 FindFirstChangeNotification
API 调用; this 是 MSDN 文档。请注意,这有点违反直觉:请参阅下面提到的线程,了解如何在 while 循环中使用它。
还有
ReadDirectoryChanges
API 调用,它没有被 JCL/JVCL 包装,并且有 MSDN 文档这里,还有一个 Delphi win32 示例。
此线程解释了两个 API 调用之间的差异。
--杰罗恩
这是使用 JEDI JVCL 的复杂 TJvChangeNotify 组件来监视目录的简单方法。
在主窗体Create过程中,添加以下代码:
var rJvChangeItem:= JvChangeNotify1.Notifications[0];
rJvChangeItem.Directory:= [the folder you want to monitor - string];
JvChangeNotify1.Active:= True;
您可以使用此组件TDirectoryWatch,并在目录中发生某些更改时收到通知,然后您可以手动检查文件时间戳或类似内容