文件更新时的 Delphi 通知

问题描述 投票:0回答:6

我的应用程序在其数据库中包含文档。用户可以打开文档,在这种情况下,文档将保存到临时文件夹并在用户的计算机上打开。

我希望在这些临时文件之一发生更改时收到通知,并让用户将更改后的文档保存回数据库。

在 Delphi7 中最简单的方法是什么? (我想它需要一些 shell 魔法或第 3 方组件)

谢谢!

delphi winapi shell file-io delphi-7
6个回答
11
投票

您可以使用 JEDI JVCL

 集合中的 
TJvChangeNotify 组件检测临时文件(或任何文件)中的更改。


9
投票

您可以:

  1. 使用 Win32 API SHChangeNotifyRegister 函数来监视临时文件夹中的更改,然后让回调检查临时文件是否正在报告更改。

  2. 由于您知道您感兴趣的确切文件,因此您可以在计时器或线程中使用 FindFirstFile 直接手动监控它们的大小和时间戳变化。


6
投票

除了RRuzRemy Lebeau所写:

请注意,

TJvChangeNotify
单元中的
JvChangeNotify
使用
FindFirstChangeNotification
API 调用; this 是 MSDN 文档。请注意,这有点违反直觉:请参阅下面提到的线程,了解如何在 while 循环中使用它。

还有

ReadDirectoryChanges
API 调用,它没有被 JCL/JVCL 包装,并且有 MSDN 文档这里,还有一个 Delphi win32 示例

此线程解释了两个 API 调用之间的差异。

--杰罗恩



0
投票

这是使用 JEDI JVCL 的复杂 TJvChangeNotify 组件来监视目录的简单方法。

  1. 在主窗体上放置一个 jvChangeNotify 组件。
  2. 单击其 Notifications 属性。
  3. 编辑 JvChangeNotify1.Notifications 对话框中,单击 添加 新图标。
  4. 关闭对话框。
  5. 对象检查器 事件选项卡上,双击 OnChangeNotify
  6. 为文件夹更改时您想要执行的操作编写代码。

在主窗体Create过程中,添加以下代码:

var rJvChangeItem:= JvChangeNotify1.Notifications[0];
rJvChangeItem.Directory:= [the folder you want to monitor - string];
JvChangeNotify1.Active:= True;

0
投票

您可以使用此组件TDirectoryWatch,并在目录中发生某些更改时收到通知,然后您可以手动检查文件时间戳或类似内容

© www.soinside.com 2019 - 2024. All rights reserved.