如何等待文件完全复制?

时间:2010-09-03 03:56:12

标签: c# .net file-io .net-2.0

我有一个线程可以轮询文件夹中的新文件。问题是,它看到一个新文件,并在文件被另一个进程完全复制之前就开始处理它。因此,轮询器会获取另一个进程错误所使用的文件。

有没有办法检查文件是免费使用还是得到通知?我们当然可以使用异常处理代码,但是有更好的方法吗?

Tech:.NET 2.0 / C#

更新:

  • 从其他答案中发现,如果我们有权访问编写该文件的应用程序,那么更好的设计是从其他扩展名.tmp开始,然后在复制后重命名。

  • 如果我们不控制源应用程序,可以使用FileStream.Lock

1 个答案:

答案 0 :(得分:2)

我们尝试在处理文件之前锁定文件,并在尝试读取文件时处理IOException而不是一般异常。

请参阅MSDN上的FileStream.Lock