IsFileReady
许多人开始使用 FileSystemWatcher 时常见的错误是没有考虑到 FileWatcher 事件是在创建文件后立即引发的。但是,文件可能需要一些时间才能完成。
示例 :
例如,文件大小为 1 GB。文件 apr 要求由另一个程序创建(Explorer.exe 从某处复制它),但完成该过程需要几分钟。该事件会引发创建时间,你需要等待文件准备好复制。
这是一种检查文件是否准备好的方法。
public static bool IsFileReady(String sFilename)
{
// If the file can be opened for exclusive access it means that the file
// is no longer locked by another process.
try
{
using (FileStream inputStream = File.Open(sFilename, FileMode.Open, FileAccess.Read, FileShare.None))
{
if (inputStream.Length > 0)
{
return true;
}
else
{
return false;
}
}
}
catch (Exception)
{
return false;
}
}