• 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 }  
  • 相关阅读:
    python中join函数
    python实现反转字符串
    map函数
    python中lambda函数
    python中reduce函数
    python实现斐波那契数列
    迭代器和生成器
    经典算法动态图
    数据中心团队对于液体冷却的应用还需要适应
    物联网正将数据中心推向边缘
  • 原文地址:https://www.cnblogs.com/MR520/p/2408782.html
Copyright © 2020-2023  润新知