冰楓論壇

標題: [C#] 檢測檔案是否被占用 [打印本頁]

作者: whitefox    時間: 2023-7-8 23:03
標題: [C#] 檢測檔案是否被占用
本帖最後由 whitefox 於 2023-7-8 23:08 編輯

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

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

  5.     try
  6.     {
  7.         fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.None);
  8.         bLock = false;
  9.     }
  10.     finally
  11.     {
  12.         if (fs != null) fs.Close();
  13.     }

  14.     return bLock;
  15. }
複製代碼
方法二,使用 Win API kernel32.dll 的函式檢測
  1. // 判斷檔案是否打開
  2. [DllImport("kernel32.dll")]
  3. public static extern IntPtr _lopen(string lpPathName, int iReadWrite);
  4. // 關閉檔案控制代碼(句柄)
  5. [DllImport("kernel32.dll")]
  6. public static extern bool CloseHandle(IntPtr hObject);
  7. // 常數
  8. public const int OF_READWRITE = 2;
  9. public const int OF_SHARE_DENY_NONE = 0x40;
  10. public static readonly IntPtr HFILE_ERROR = new IntPtr(-1);

  11. public static bool IsFileLock(string FilePath)
  12. {
  13.     IntPtr handler = _lopen(FilePath, OF_READWRITE | OF_SHARE_DENY_NONE);
  14.     CloseHandle(handler);
  15.     return handler == HFILE_ERROR;
  16. }
複製代碼





歡迎光臨 冰楓論壇 (https://bingfong.com/) Powered by 冰楓