【发布时间】:2012-09-19 18:44:59
【问题描述】:
背景:一组操作员在第三方应用程序中处理最大为 10GB 的大型批处理文件。每个文件包含数千张图像,每处理 50 张图像后,他们点击保存按钮。工作场所的电源不可靠,如果在保存过程中断电,整个文件就会损坏。为了克服这个问题,我正在编写一个使用 FileSystemWatcher 的小实用程序来检测保存并创建备份,以便无需重新处理整个批次即可恢复它。
问题:FileSystemWatcher 在报告事件方面做得非常好,但有一个我无法查明的问题。由于监控的文件很大,保存过程需要几秒钟。我希望在保存操作完成后收到通知。我怀疑每次将文件缓冲区刷新到磁盘时,都会触发不需要的事件。无论保存是否在进行中,该文件仍处于锁定状态以进行写入,因此我无法确定。
在保存操作期间创建文件的备份会破坏目的,因为它会损坏备份的文件。
问题:
- 有没有办法使用 FileSystemWatcher 在保存操作完成后收到通知?
- 如果没有,我还能如何可靠地检查文件是否仍在被写入?
替代方案:也欢迎任何替代建议。
【问题讨论】:
-
看看这篇文章,也许有一种方法可以通过使用线程来做你想做的事情。但基于你想做的事情,你不能只用一个FileSystemWatcher..csharp-codesamples.com/2009/02/…
-
谢谢。您应该将此作为答案发布。带有条件取消令牌的线程队列似乎是一种方式。如果在复制期间检测到更新,则该令牌可用于取消复制操作。
标签: c# .net file file-io filesystemwatcher