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

生成文件的时候,如果该文件夹下的同名文件被打开(或者被使用),如果这时再生成一个同名文件,则会提示文件正在被占用。

解决方法有两个,一个是保存的文件名改成该文件夹下不存在的(随机数之类的XXOO都行,只要不存在就可以了),当然这里指的是该同名文件是被使用,如果该同名文件不打开,生成文件的时候就直接将其覆盖了;

另一个是判断当前文件的状态,如果当前文件被操作了,则该干嘛干嘛,如果没有被操作,那就生成了。

从网上找了好多资料,今天记录下,以免将来用到,直接上代码,如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Runtime.InteropServices;
using System.Web.Mvc;

namespace HotelInventory.Web.Models.Repository
{
    public static class FileControlRepository1
    {
        [DllImport("kernel32.dll")]
        public static extern IntPtr _lopen(string lpPathName, int iReadWrite);//调用windowsdll
 
        [DllImport("kernel32.dll")]
        public static extern bool CloseHandle(IntPtr hObject);//调用windowsdll
        public const int OF_READWRITE = 2;//这些参数是不可少的,当然也可以不声明,直接将值赋值给对应的函数,这里只是生明变量将其存起来而已
        public const int OF_SHARE_DENY_NONE = 0x40;//这些参数是不可少的,当然也可以不声明,直接将值赋值给对应的函数,这里只是生明变量将其存起来而已
        public static readonly IntPtr HFILE_ERROR = new IntPtr(-1);

        public static int IsFileOpen(string path)
        {
            string vFileName = path;
            if (!File.Exists(vFileName))
            {                
                return 0;//文件不存在
            }
            IntPtr vHandle = _lopen(vFileName, OF_READWRITE | OF_SHARE_DENY_NONE);//windows Api上面有定义扩展方法
       if (vHandle == HFILE_ERROR) 
       {         
         return 2;//文件被占用
       }
       CloseHandle(vHandle);//windows Api上面有定义扩展方法
       return 1;//文件存在且没被占用
     }
  }
}

以上代码直接调用就可以了,path是完整的文件路径,命名空间也不要忘了。

转载于:https://www.cnblogs.com/LJP-JumpAndFly/p/4176227.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#中,有多种方法可以判断文件是否存在。其中一种方法是使用File.Exists()函数。你可以在if语句中使用这个函数来判断文件是否存在。例如,可以使用以下代码来判断文件名为test.txt的文件是否存在: ```csharp if(File.Exists(@"E:\Files\test.txt")) { // 文件存在的处理逻辑 } else { // 文件不存在的处理逻辑 } ``` 另一种方法是使用System.IO.Directory.Exists()函数来判断文件是否存在。你可以在if语句中使用这个函数来判断文件是否存在。如果文件夹不存在,可以使用System.IO.Directory.CreateDirectory()函数来创建文件夹。例如,可以使用以下代码来判断文件夹"E:\Files"是否存在: ```csharp if (!System.IO.Directory.Exists(@"E:\Files")) { System.IO.Directory.CreateDirectory(@"E:\Files"); // 创建文件夹的处理逻辑 } ``` 还有其他方法可以判断文件是否存在,比如通过FileInfo类、DirectoryInfo类等。但以上提到的两种方法是最常用的方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [C#判断文件夹或文件是否存在的方法](https://blog.csdn.net/BeanGo/article/details/121902170)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [C#判断文件存在的几种方法详解](https://blog.csdn.net/weixin_34174132/article/details/92657594)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值