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;
    }
}