我有一个线程,它在文件夹中轮询新文件。问题是,它会看到一个新文件并开始处理它,甚至在文件被另一个进程完全复制之前。因此,轮询器获取另一个进程错误使用的文件。
有没有办法检查文件是否可以自由使用或得到通知?我们当然可以使用异常处理代码,但是有更好的方法吗?
技术:.net 2.0/c#
更新:
从其他答案中发现,如果我们可以访问编写文件的应用程序,那么更好的设计是从其他扩展名.tmp开始,然后在复制后重命名它。
如果不控制源应用程序,则可以使用filestream.lock
我们尝试在处理文件之前获取该文件的锁,并在尝试读取该文件时处理IOException而不是一般异常。
见 FileStream.Lock 在MSDN上。