2

背景:一组操作员在第三方应用程序中处理高达 10GB 的大型批处理文件。每个文件包含数千张图像,每处理 50 张图像后,他们点击保存按钮。工作场所的电源不可靠,如果在保存过程中断电,整个文件就会损坏。为了克服这个问题,我正在编写一个使用 FileSystemWatcher 的小实用程序来检测保存并创建备份,以便无需重新处理整个批次即可恢复它。

问题:FileSystemWatcher 在报告事件方面做得很好,但有一个我无法确定的问题。由于监控的文件很大,保存过程需要几秒钟。我希望在保存操作完成后收到通知。我怀疑每次将文件缓冲区刷新到磁盘时,都会触发不需要的事件。无论保存是否正在进行中,该文件仍处于锁定状态,因此我无法判断。

在保存操作期间创建文件的备份会破坏目的,因为它会损坏备份的文件。

问题:

  • 有没有办法在保存操作完成后使用 FileSystemWatcher 来通知?
  • 如果没有,我还能如何可靠地检查文件是否仍在被写入?

替代方案:也欢迎任何替代建议。

4

1 回答 1

1

真的没有直接的方法来做你想做的事。文件系统本身不知道保存操作何时完成。从逻辑上讲,您可能将其视为一系列保存,因为用户多次单击“保存”按钮,但这不是文件系统所看到的。只要应用程序锁定了文件以进行写入,就文件系统而言,它仍处于保存过程中。

如果你仔细想想,这是有道理的。如果应用程序保留对文件的写访问权,文件系统如何知道文件何时处于“损坏”状态,何时不处于“损坏”状态?只有编写文件的应用程序知道这一点。

如果您有权访问写入文件的应用程序,则可能可以解决此问题。如果做不到这一点,您可能会获得最后修改日期的内容,仅当文件在一段时间内未修改时才创建备份,但这必然是错误且不可靠的。

于 2012-09-19T18:50:45.370 回答