您的位置:首页 > 编程语言 > C#

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

2012-03-20 21:09 555 查看
今天很无语,要解决一个问题,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)

/// <summary>
/// Description of UseAPI.
/// </summary>
public class UseAPI
{

public UseAPI()
{
}

private const int OF_READWRITE = 2;
private const int OF_SHARE_DENY_NONE = 0x40;
private static readonly IntPtr HFILE_ERROR = new IntPtr(-1);

/// <summary>
/// 判断文件是否打开
/// </summary>
/// <param name="lpPathName">文件名称</param>
/// <param name="iReadWrite"></param>
/// <returns></returns>
[DllImport("kernel32.dll")]
private static extern IntPtr _lopen(string lpPathName, int iReadWrite);

/// <summary>
/// 关闭文件句柄
/// </summary>
/// <param name="hObject"></param>
/// <returns></returns>
[DllImport("kernel32.dll")]
private static extern bool CloseHandle(IntPtr hObject);

/// <summary>
/// 文件名称
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
public static string IsOpen(string filename)
{
IntPtr vHandle = _lopen(filename, OF_READWRITE | OF_SHARE_DENY_NONE);
if (vHandle == HFILE_ERROR)
{
CloseHandle(vHandle);
return "文件被占用!";
}
else
return "没有被占用!";

//CloseHandle(vHandle);
}
}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: