冰楓論壇

 找回密碼
 立即註冊
ads_sugarbook
搜索
查看: 1924|回覆: 0
打印 上一主題 下一主題

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

[複製鏈接]

621

主題

0

好友

766

積分

高級贊助會員

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

UID
390967
帖子
1187
主題
621
精華
0
積分
766
楓幣
6903
威望
309
存款
4100
贊助金額
1800
推廣
0
GP
1625
閱讀權限
150
在線時間
142 小時
註冊時間
2023-5-18
最後登入
2024-4-29

2023年紀念勳章 太陽勳章 神手勳章 高級客戶 VIP會員 私服達人 懶人勳章 幼兒勳章 音樂勳章 屁孩勳章 貢獻王 性別(女) 性別(男) 積分勳章 發帖達人 2023端午節紀念勳章 富豪勳章 富可敵國 2023中秋節紀念勳章 解說達人 論壇粉絲 2023聖誕節紀念勳章

跳轉到指定樓層
1
發表於 2023-7-8 23:03:35 |只看該作者 |倒序瀏覽
本帖最後由 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. }
複製代碼
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1骰子
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們職位招聘本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-4-29 12:00

回頂部