当一个文件正在复制到file watcher文件夹时,如何判断文件是否复制完整并可以使用?因为我在文件复制期间收到多个事件。 (该文件是通过另一个程序使用 File.Copy 复制的。)
最佳答案
当我遇到这个问题时,我想出的最好的解决办法是不断地尝试获取文件的独占锁;在写入文件时,锁定尝试将失败,本质上是 this 中的方法回答。一旦文件不再被写入,锁定就会成功。
不幸的是,做到这一点的唯一方法是在打开文件时使用 try/catch,这让我感到畏缩——不得不使用 try/catch 总是很痛苦。不过,似乎没有任何解决办法,所以这就是我最终使用的方法。
修改那个答案中的代码就可以了,所以我最终使用了这样的东西:
private void WaitForFile(FileInfo file)
{
FileStream stream = null;
bool FileReady = false;
while(!FileReady)
{
try
{
using(stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
FileReady = true;
}
}
catch (IOException)
{
//File isn't ready yet, so we need to keep on waiting until it is.
}
//We'll want to wait a bit between polls, if the file isn't ready.
if(!FileReady) Thread.Sleep(1000);
}
}
关于c# - FileSystemWatcher - 文件是否准备好使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12268067/