【发布时间】:2020-10-14 01:40:11
【问题描述】:
我正在使用 Delphi 和 ReadDirectoryChangesW(在 TThread 中)来检测特定文件夹何时发生更改。这工作得很好。我需要知道更改何时完成,以便我可以安全地对文件进行操作。
以下是场景:我已将打印机映射到特定的文件名和文件夹(文件:本地端口c:\MonitorMe\prinfil.dat)。文件夹中的唯一文件将是该打印机文件。打印作业可以是单页,也可以是数百页——我必须等到“打印到文件”完成后才能触发进一步的操作。我正在监视 FILE_NOTIFY_CHANGE_SIZE 和 FILE_NOTIFY_CHANGE_LAST_WRITE - 所以我会定期收到文件仍在“打印到”的通知。
我正在寻找一种安全的方法来实际检测“打印”何时完成。我想我可以在表单中设置一个计时器,并在线程中调用Synchronize(StillPrinting)。 StillPrinting 将停止并重新启动计时器,这样只有在大约 300 毫秒的 NO 文件夹更改后,计时器才会执行 - 触发 OnAfterPrintComplete 事件。这似乎很危险。
我可以通过什么来确定文件保存是否已完成?
【问题讨论】:
-
@fpiette 事实上,就是这样——当我阅读 FILE_NOTIFY_CHANGE_LAST_WRITE 标志的 ms 文档时,我将其解释为“每次写入”(上次写入时,每次保存多次写入)。它实际上意味着“文件关闭时最后一次写入”——这正是我想要的。我保存了一个 1300 页的文件,它完成了我需要的操作。谢谢。
标签: delphi tthread readdirectorychangesw