精华内容
下载资源
问答
  • C#判断文件是否被占用一般有两种方法,一是利用FileStream结合try...catch...finally实现,二是调用Windows API实现,下面给出两种方法的代码。 2、文件流法 using System; using System.Collections.Generic; ...

    1、前言

    C#中判断文件是否被占用一般有两种方法,一是利用FileStream结合try...catch...finally实现,二是调用Windows API实现,下面给出两种方法的代码。

    2、文件流法

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApp3
    {
        class Program
        {
            static void Main(string[] args)
            {
                string filePath = @"D:\data.xlsx";
                bool occupied = IsOccupied(filePath);
                if (occupied)
                {
                    Console.WriteLine("文件被占用");
                }
                else
                {
                    Console.WriteLine("文件未被占用");
                }
                Console.ReadKey(true);
            }
    
            static bool IsOccupied(string filePath)
            {
                FileStream stream = null;
                try
                {
                    stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None);
                    return false;
                }
                catch
                {
                    return true;
                }
                finally
                {
                    if (stream != null)
                    {
                        stream.Close();
                    }
                }
            }
        }
    }
    

    3、Windows API法

    using System;
    using System.Runtime.InteropServices;
    
    namespace ConsoleApp3
    {
        class Program
        {
            // 判断文件是否打开
            [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);
    
            static void Main(string[] args)
            {
                string filePath = @"D:\data.xlsx";
                bool occupied = IsOccupied(filePath);
                if (occupied)
                {
                    Console.WriteLine("文件被占用");
                }
                else
                {
                    Console.WriteLine("文件未被占用");
                }
                Console.ReadKey(true);
            }
    
            static bool IsOccupied(string filePath)
            {
                IntPtr handler = _lopen(filePath, OF_READWRITE | OF_SHARE_DENY_NONE);
                CloseHandle(handler);
                return handler == HFILE_ERROR;
            }
        }
    }
    
    展开全文
  • C# 判断文件是否被占用

    千次阅读 2013-06-20 09:34:29
    using System.IO; using System.Runtime.InteropServices; [DllImport("kernel32.dll")] ... MessageBox.Show("文件被占用!"); return; } CloseHandle(vHandle); MessageBox.Show("没有被占用!"); }
    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 = @"c:\temp\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("没有被占用!");
    }

    展开全文
  • 先判断一下文件是否已经被打开了(占用),如果已经被打开了,就别再去打了,可以给出你自己的提示(或根据自己的需要... C# 判断文件是否被占用的可以用下面的方法     1 2 3 4 5 6 7 8 9 10 11 12
    先判断一下文件是否已经被打开了(占用),如果已经被打开了,就别再去打了,可以给出你自己的提示(或根据自己的需要进行其它的处理)。 
    

       

           
           C# 判断文件是否被占用的可以用下面的方法
           
       

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    方法一:
    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 =  @"c:\temp\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( "没有被占用!" );  
    }

    方法二:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    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没有使用  
    }
    展开全文
  • MessageBox.Show("文件被占用!"); return; } CloseHandle(vHandle); MessageBox.Show("没有被占用!"); } 第二种方法: public static bool IsFileInUse(string fileName) { bool ...

    1.第一种方法:

    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 = @"c:\temp\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("没有被占用!");
    }

    第二种方法:

    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没有使用
    }


    展开全文
  • 最近遇到一个问题,我在实现一个C#客户端的附件上传功能时,只能上传未被其他进程占用的文件,因此每次上传文件前需要先判断被选中文件是否被占用。...我上网查了下使用C#判断文件是否被占用的方法。...
  • 摘要:C#源码,文件操作,文件占用 C#判断文件是否正在被使用,也就是是否被占用,占用的话,如果我们此时要删除文件,会得到一个文件被其它程序占用而无法删除的提示,本程序仅是判断文件是否正在被使用中,除此之外...
  • 转自:... C# 判断文件是否被占用的三种方法 using System.IO; using System.Runtime.InteropServices; [DllImport("kernel32.dll")] public static extern IntPtr _lopen(string ...
  • C#判断文件是否被打开占用

    千次阅读 2012-07-11 11:13:55
    C#判断文件是否被打开占用 using System.IO; using System.Runtime.InteropServices; [DllImport("kernel32.dll")] public static extern IntPtr _lopen(string lpPathName, int iReadWrite); [DllImport("kernel32...
  • C#判断文件是否占用

    2018-06-01 21:33:48
    [DllImport("kernel32.dll")] public static extern IntPtr _lopen(string lpPathName, int iReadWrite); [DllImport("kernel32.dll")] public static extern bool CloseHandle(IntPtr...
  • [C#.Net]判断文件是否被占用的两种方法 今天开发产线测试Tool时发现日志文件会几率性的被占用,上网浏览找到最简单的代码(API或者FileStream),在这里抛砖引玉下。 第一种方法:API 1 using System.IO; 2 ...
  • C# 检测文件是否被占用

    千次阅读 2008-09-12 15:44:00
    检测文件是否被占用(一个思路)File.Move(OldFileFullPath,NewFileFullPath) 让 NewFileFullPath 等于 OldFileFullPath 例如: try { File.Move("d://a.bmp", "d://a.bmp"); } catch (Exception ex) { Console.Writ
  • C#实现判断文件是否被占用与解除文件占用  收藏 北风其凉   发表于 8个月前 阅读 930 收藏 2 点赞 0 评论 0   最近遇到一个问题,我在实现一个C#客户端的附件...
  • #region 检测文件是否被占用 /// <summary> /// 判定文件是否打开 /// </summary> [DllImport("kernel32.dll")] public static extern IntPtr _lopen(string lpPathName, int iReadWrite); ...
  • 主要介绍了C# 中Excel导入时 判断是否被占用三种方法的相关资料,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,758
精华内容 5,903
关键字:

c#判断文件是否被占用

c# 订阅