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