我的应用程序在其数据库中包含文档。在这种情况下,用户可以打开文档,文档被保存到临时文件夹并在用户的计算机上打开。德尔福通知当文件得到更新
我希望在这些临时文件之一发生更改时收到通知,并提供用户将更改后的文档保存回数据库。
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