Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何等待文件被完全复制?_C#_.net_File Io_.net 2.0 - Fatal编程技术网

C# 如何等待文件被完全复制?

C# 如何等待文件被完全复制?,c#,.net,file-io,.net-2.0,C#,.net,File Io,.net 2.0,我有一个线程轮询文件夹中的新文件。问题是,它看到一个新文件,甚至在该文件被另一个进程完全复制之前就开始处理它。因此,轮询器获取另一个进程错误使用的文件 有没有办法检查文件是否可以免费使用或得到通知?我们当然可以使用异常处理代码,但是有更好的方法吗 技术:.NET 2.0/C# 更新: 从其他答案中发现,如果我们可以访问编写文件的应用程序,那么更好的设计是从其他扩展名.tmp开始,然后在复制后重命名它 如果我们不控制源应用程序,就可以使用FileStream.Lock 我们试图在处理文件之前锁定

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

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

技术:.NET 2.0/C#

更新:

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

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


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


请参阅MSDN上的。

有关一些一般答案,请参阅。对于特定的平台(如Windows.NET),可能有更好的解决方案,但上面提到的答案有两种解决方案。谢谢。这听起来是个更好的主意。