java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Excel导入时 判断是否被占用

C# 中Excel导入时判断是否被占用三种方法

投稿:lqh

这篇文章主要介绍了C# 中Excel导入时 判断是否被占用三种方法的相关资料,需要的朋友可以参考下

C# 中Excel导入时 判断是否被占用三种方法

Excel导入时 判断是否被占用,三种方法:

1:Win7可以,WIN10不可以

try 
    { 
     //原理,如果文件可以被移动,说明未被占用 
     string strPath = "C:\\123OK.Excel"; 
     string strPath2 = "C:\\123OK22.Excel"; 
     File.Move(strPath, strPath2); 
     File.Move(strPath2, strPath); 
    } 
    catch 
    { 
     MessageBox.Show("文件被占用!"); 
     return; 
    } 

2:文件流

try 
    { 
     //原理,如果文件可写,说明未被占用 
     System.IO.FileStream stream = System.IO.File.OpenWrite("文件路径"); 
     stream.Close(); 
    } 
    catch 
    { 
     MessageBox.Show("文件被占用!"); 
     return; 
    } 

3:WIN32 API调用(强烈推荐)

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
 
using System.IO; 
using System.Runtime.InteropServices; 
 
namespace WindowsFormsApplication1 
{ 
 public partial class Form1 : Form 
 { 
  [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); 
 
  public Form1() 
  { 
   InitializeComponent(); 
  } 
 
  private void button1_Click(object sender, EventArgs e) 
  { 
   try 
   { 
    string vFileName = @"c:\123.xlsx"; 
    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("没有被占用!"); 
   } 
   catch (Exception ex) 
   { 
    throw ex; 
   } 
  } 
 } 
} 

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

您可能感兴趣的文章:
阅读全文