- UID
- 390967
- 帖子
- 1590
- 主題
- 820
- 精華
- 0
- 積分
- 854
- 楓幣
- 10922
- 威望
- 395
- 存款
- 10100
- 贊助金額
- 1800
- 推廣
- 0
- GP
- 2674
- 閱讀權限
- 150
- 在線時間
- 188 小時
- 註冊時間
- 2023-5-18
- 最後登入
- 2024-11-20
|
本帖最後由 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;
- }
複製代碼 |
|