[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]