判断文件是否被占用的两种方法

第一种方法:采用文件流方式;打开进行读取操作,看看是否可以;(亲自尝试,完全正确)

 

public static bool IsFileInUse(string fileName)  
{  
bool inUse = true;  
FileStream fs = null;  
try  
{  
fs = new FileStream(fileName, FileMode.Open, FileAccess.Read,  
FileShare.None);  
inUse = false;  
}  
catch  
{  
}  
finally  
{  
if (fs != null)  
fs.Close();  
}  
return inUse;//true表示正在使用,false没有使用  
}  


第二种:

 

添加引用:kernel32.dll;32位动态链接库文件

 

using System.IO;  
using System.Runtime.InteropServices;  
[DllImport("kernel32.dll")]  
public static extern IntPtr _lopen(string lpPathName, int iReadWrite);  
[DllImport("kernel32.dll")]  
public static extern bool CloseHandle(IntPtr hObject);  
public const int OF_READWRITE = 2;  
public const int OF_SHARE_DENY_NONE = 0x40;  
public readonly IntPtr HFILE_ERROR = new IntPtr(-1);  
private void button1_Click(object sender, EventArgs e)  
{  
string vFileName = @"d:\temp.bmp";  
if (!File.Exists(vFileName))  
{  
MessageBox.Show("文件都不存在!");  
return;  
}  
IntPtr vHandle = _lopen(vFileName, OF_READWRITE | OF_SHARE_DENY_NONE);  
if (vHandle == HFILE_ERROR)  
{  
MessageBox.Show("文件被占用!");  
return;  
}  
CloseHandle(vHandle);  
MessageBox.Show("没有被占用!");  
}  

个人更加倾向于第一种,少用引用,在部署的时候,就会少很多问题~~,上线时才能少些bug、小编比较粗心,由于项目中用的引用较多,所以部署的时候,总可能会丢引用,在生产环境下,就没有达到预想的效果,不过也养成一个习惯,所有添加的引用都放到一个固定的文件夹中,每次部署前,先把这些dll复制到打包文件夹,就会方便许多、尽可能的少依赖于固定的软件或者操作系统。
 

 

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光下是个孩子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值