whitefox 發表於 2023-7-8 23:03:35

[C#] 檢測檔案是否被占用

本帖最後由 whitefox 於 2023-7-8 23:08 編輯

使用 Handle.exe 可以測出檔案被哪個程式占用(都沒測到程式 PID 就是沒被占用)
那如果只單存檢測是否被占用,也可以自己寫個函式來使用
方法有兩種:

方法一,使用 FileStream 開啟檔案檢測public static bool IsFileLock(string FilePath)
{
    bool bLock = true;
    FileStream fs = null;

    try
    {
        fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.None);
        bLock = false;
    }
    finally
    {
        if (fs != null) fs.Close();
    }

    return bLock;
}方法二,使用 Win API kernel32.dll 的函式檢測// 判斷檔案是否打開

public static extern IntPtr _lopen(string lpPathName, int iReadWrite);
// 關閉檔案控制代碼(句柄)

public static extern bool CloseHandle(IntPtr hObject);
// 常數
public const int OF_READWRITE = 2;
public const int OF_SHARE_DENY_NONE = 0x40;
public static readonly IntPtr HFILE_ERROR = new IntPtr(-1);

public static bool IsFileLock(string FilePath)
{
    IntPtr handler = _lopen(FilePath, OF_READWRITE | OF_SHARE_DENY_NONE);
    CloseHandle(handler);
    return handler == HFILE_ERROR;
}
頁: [1]
查看完整版本: [C#] 檢測檔案是否被占用