冰楓論壇
標題:
[C#] 檢測檔案是否被占用
[打印本頁]
作者:
whitefox
時間:
2023-7-8 23:03
標題:
[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 的函式檢測
// 判斷檔案是否打開
[DllImport("kernel32.dll")]
public static extern IntPtr _lopen(string lpPathName, int iReadWrite);
// 關閉檔案控制代碼(句柄)
[DllImport("kernel32.dll")]
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;
}
複製代碼
歡迎光臨 冰楓論壇 (https://bingfong.com/)
Powered by 冰楓