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