C# _lopen判斷文件是否正在被使用


 

     今天很無語,要解決一個問題,Silverlight中無法對用戶打開的文件進行判斷,是否打開,沙箱模式運作,出於安全性考慮,是無法獲得

本地文件的絕對路徑,無法調用API來判斷實現這功能,最后還是用Trycatch來解決。

     C#能夠調用的API都能從以下網站查到:

          API查詢網站:http://www.webtropy.com/articles/Win32-API-DllImport-art9.asp

      還是寫下C# 調用系統API來實現文件判斷效果:

         1.命名空間:using System.Runtime.InteropServices

         2.  API函數 _lopen(string pathfile,int ireadwriter)

 1 /// <summary>
2 /// Description of UseAPI.
3 /// </summary>
4 public class UseAPI
5 {
6
7 public UseAPI()
8 {
9 }
10
11 private const int OF_READWRITE = 2;
12 private const int OF_SHARE_DENY_NONE = 0x40;
13 private static readonly IntPtr HFILE_ERROR = new IntPtr(-1);
14
15
16 /// <summary>
17 /// 判斷文件是否打開
18 /// </summary>
19 /// <param name="lpPathName">文件名稱</param>
20 /// <param name="iReadWrite"></param>
21 /// <returns></returns>
22 [DllImport("kernel32.dll")]
23 private static extern IntPtr _lopen(string lpPathName, int iReadWrite);
24
25 /// <summary>
26 /// 關閉文件句柄
27 /// </summary>
28 /// <param name="hObject"></param>
29 /// <returns></returns>
30 [DllImport("kernel32.dll")]
31 private static extern bool CloseHandle(IntPtr hObject);
32
33 /// <summary>
34 /// 文件名稱
35 /// </summary>
36 /// <param name="filename"></param>
37 /// <returns></returns>
38 public static string IsOpen(string filename)
39 {
40 IntPtr vHandle = _lopen(filename, OF_READWRITE | OF_SHARE_DENY_NONE);
41 if (vHandle == HFILE_ERROR)
42 {
43 CloseHandle(vHandle);
44 return "文件被占用!";
45 }
46 else
47 return "沒有被占用!";
48
49 //CloseHandle(vHandle);
50 }
51 }  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM