當前位置:
首頁 > 知識 > C井判斷文件是否被佔用的兩種方法

C井判斷文件是否被佔用的兩種方法

第一種方法:採用文件流方式;打開進行讀取操作,看看是否可以;(親自嘗試,完全正確)

  1. public static bool IsFileInUse(string fileName)
  2. {
  3. bool inUse = true;
  4. FileStream fs = null;
  5. try
  6. {
  7. fs = new FileStream(fileName, FileMode.Open, FileAccess.Read,
  8. FileShare.None);
  9. inUse = false;
  10. }
  11. catch
  12. {
  13. }
  14. finally
  15. {
  16. if (fs != null)
  17. fs.Close();
  18. }
  19. return inUse;//true表示正在使用,false沒有使用
  20. }

第二種:

添加引用:kernel32.dll;32位動態鏈接庫文件

  1. using System.IO;
  2. using System.Runtime.InteropServices;
  3. [DllImport("kernel32.dll")]
  4. public static extern IntPtr _lopen(string lpPathName, int iReadWrite);
  5. [DllImport("kernel32.dll")]
  6. public static extern bool CloseHandle(IntPtr hObject);
  7. public const int OF_READWRITE = 2;
  8. public const int OF_SHARE_DENY_NONE = 0x40;
  9. public readonly IntPtr HFILE_ERROR = new IntPtr(-1);
  10. private void button1_Click(object sender, EventArgs e)
  11. {
  12. string vFileName = @"d: emp.bmp";
  13. if (!File.Exists(vFileName))
  14. {
  15. MessageBox.Show("文件都不存在!");
  16. return;
  17. }
  18. IntPtr vHandle = _lopen(vFileName, OF_READWRITE | OF_SHARE_DENY_NONE);
  19. if (vHandle == HFILE_ERROR)
  20. {
  21. MessageBox.Show("文件被佔用!");
  22. return;
  23. }
  24. CloseHandle(vHandle);
  25. MessageBox.Show("沒有被佔用!");
  26. }

個人更加傾向於第一種,少用引用,在部署的時候,就會少很多問題~~,上線時才能少些bug、小編比較粗心,由於項目中用的引用較多,所以部署的時候,總可能會丟引用,在生產環境下,就沒有達到預想的效果,不過也養成一個習慣,所有添加的引用都放到一個固定的文件夾中,每次部署前,先把這些dll複製到打包文件夾,就會方便許多、儘可能的少依賴於固定的軟體或者操作系統。

C井判斷文件是否被佔用的兩種方法

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

打造Python的vim環境
前端開發(HTML+CSS靜態部分)

TAG:程序員小新人學習 |