C# 偵測資料夾內檔案狀態是否被鎖定(或是可用)

參考來源:https://stackoverflow.com/questions/876473/is-there-a-way-to-check-if-a-file-is-in-use

因為常常會用到,所以先收集起來,註解改用中文

記得要 using System.IO;


DirectoryInfo directoryInfo = new DirectoryInfo(sourcePath);
foreach(FileInfo fi in directoryInfo.GetFiles())
{
    if (!isFileLocked(fi) && fi.Length > 0)
    {
        // ...繼續處理可用檔案
    }
}



這個 isFileLocked 如下:


protected virtual bool IsFileLocked(FileInfo file)
{
    FileStream stream = null;

    try
    {
        stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None);
    }
    catch (IOException)
    {
        //檔案無法開啟可能原因:
        // 檔案仍然被寫入狀態
        // 被其他Thread程序使用中
        // 已經不存在 (或被程序處理掉了)
        return true;
    }
    finally
    {
        //如果已經被開啟不管狀態為何,記得要關閉資源
        if (stream != null)
            stream.Close();
    }

    //可以被開啟,回報檔案未被鎖定
    return false;
}




留言

這個網誌中的熱門文章

【研究】列印的條碼為什麼很難刷(掃描)

C# 使用 Process.Start 執行外部程式

統一發票列印小程式