sno*_*ber 12 .net c# filesystemwatcher
将文件复制到文件观察程序文件夹时,如何识别文件是否已完全复制并可以使用?因为我在文件复制期间收到多个事件.(使用File.Copy通过另一个程序复制该文件.)
Tac*_*roy 12
当我遇到这个问题时,我提出的最佳解决方案是不断尝试获取文件的独占锁定; 在写入文件时,锁定尝试将失败,本质上是此答案中的方法.一旦文件没有被写入,锁定将成功.
不幸的是,唯一的方法是在打开文件时包装一个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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11973 次 |
| 最近记录: |