我正在使用 Delphi 和ReadDirectoryChangesW
(in a TThread
) 来检测特定文件夹何时发生更改。这工作得很好。我需要知道更改何时完成,以便我可以安全地对文件执行某些操作。
这是场景:我已将打印机映射到特定的文件名和文件夹(文件:本地端口c:\MonitorMe\prinfil.dat
)。该文件夹中的唯一文件将是该打印机文件。打印作业可以是单页,也可以是数百页——我必须等到“打印到文件”完成后才能触发进一步的操作。我正在监视FILE_NOTIFY_CHANGE_SIZE
并且FILE_NOTIFY_CHANGE_LAST_WRITE
- 所以我会定期收到文件仍在“正在打印到”的通知。
我正在寻找一种安全的方法来实际检测“打印”何时完成。我想我可以在表单中设置一个计时器,然后Synchronize(StillPrinting)
在线程中调用。StillPrinting
将停止并重新启动计时器,以便只有在大约 300 毫秒的 NO 文件夹更改之后,计时器才会执行 - 触发OnAfterPrintComplete
事件。这似乎很危险。
我可以寻找什么来确定文件保存是否已完成?