我想检测文件日期何时更改并更新用作Tdatasource的DevX TdxMemData,然后在使用它的TDBGrid中看到它。
我发现了一些使用ReadDirectoryChangesW的代码,但对于我的简单需求似乎相当复杂。
我正在考虑使用TTimer并每五秒钟关闭一次。 (这对我而言足够准确。)
这样做有什么警告吗?我已经读过Threads对VCL访问等有各种各样的限制。同样的事情是否适用于TTimer事件?
在Timer事件中调用FileAge和更新DevEx TdxMemData对象时,有什么需要注意的吗?我的主应用程序会看到这些更新吗?
当Timer事件得到控制时,有没有办法检测程序的“状态”,这样可以避免出现问题?
或者我在考虑使用TTimer来开启一大堆蠕虫吗?
答案 0 :(得分:8)
在主应用程序线程中调用TTimer事件,因此从它们访问VCL对象没有问题。当你的应用程序处于空闲状态时会调用它,因此除非你手动调用Application.ProcessMessages,否则它不会在OnClick处理程序或类似的东西中发生。
我建议使用ReadDirectoryChangesW。如果使用计时器,即使应用程序处于空闲状态且文件未更改,您也将继续轮询。它可以防止你的CPU闲置,保持硬盘不会停止运转,这会对节能和电池使用产生负面影响。
答案 1 :(得分:5)
在Demos目录中有“ShellChangeNotifier”组件,它将在文件在目录中修改,添加或删除时触发事件。但是它只有一个OnChange事件,所以你不知道到底发生了什么。
中有关于此问题的一些讨论和解决方案答案 2 :(得分:4)
Windows允许您监视文件更改。作为一个快速启动,请参阅http://delphi.about.com/od/kbwinshell/l/aa030403a.htm。有几个现成的组件也可用。 Google为“delphi监控文件更改”或类似的东西
答案 3 :(得分:1)
您可以查看我的:DirectoryWatch
它是“ReadDirectoryChangesW”函数的包装器。它的变化比“ShellChangeNotifier”更具体。