c#判断文件被占用的两种方法

在日常文件操作中经常会遇到文件读写的问题,但是在多并发现场时需要先判断文件是否被占用,然后才能进行文件的操作;本文主要介绍两种判断文件是否被占用的方法:

1.利用FileAccess的自带方法,文件如果被占用会报IO异常:

private static bool IsFileLocked(string filePath)
{
    try
    {
        using (FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
        {           
         // 文件未被锁定
         return false;     
        }    
    }    
    catch (IOException)    
    {        
         // 文件被锁定        
         return true; 
    }
}
//调用bool isFileLocked = IsFileLocked("path/to/file.txt");
2.利用windows API自带方法进行判断,逻辑是获取文件操作的句柄或指针
[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 static readonly IntPtr HFILE_ERROR = new IntPtr(-1);

/// <summary>
/// 
/// </summary>
/// <param name="path"></param>
/// <returns>被打开是返回true</returns>
public static bool IsFileOpen(string path)
{
   if (!File.Exists(path))
   {
       return false;
   }
   IntPtr vHandle = _lopen(path, OF_READWRITE | OF_SHARE_DENY_NONE);//windows Api上面有定义扩展方法
   if (vHandle == HFILE_ERROR)
   {
        return true;
   }
      CloseHandle(vHandle);
      return false;
}

看到这了,如果您觉得我的文章对您有帮助,我强烈建议您,在能力所极时,给我发一元打赏买瓶水;您的支持将是我无线创作的动力。

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

A_nanda

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

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

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

打赏作者

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

抵扣说明:

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

余额充值