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

所属分类: 软件编程 / java 阅读数: 42
收藏 0 赞 0 分享

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; 
   } 
  } 
 } 
} 

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

更多精彩内容其他人还在看

Java concurrency之锁_动力节点Java学院整理

这篇文章主要为大家详细介绍了Java concurrency之锁的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java8新特性之StampedLock_动力节点Java学院整理

本文从synchronized、Lock到Java8新增的StampedLock进行对比分析,对Java8新特性之StampedLock相关知识感兴趣的朋友一起看看吧
收藏 0 赞 0 分享

Java8新特性之lambda的作用_动力节点Java学院整理

我们期待了很久lambda为java带来闭包的概念,但是如果我们不在集合中使用它的话,就损失了很大价值。现有接口迁移成为lambda风格的问题已经通过default methods解决了,在这篇文章将深入解析Java集合里面的批量数据操作解开lambda最强作用的神秘面纱。
收藏 0 赞 0 分享

Java8新特性之Base64详解_动力节点Java学院整理

这篇文章主要为大家详细介绍了Java8新特性之Base64的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java8新特性之JavaFX 8_动力节点Java学院整理

这篇文章主要介绍了Java8新特性之JavaFX 8的相关知识,非常不错,具有参考借鉴价值,需要的朋友参考下吧
收藏 0 赞 0 分享

将本地jar包安装进入maven仓库(实现方法)

下面小编就为大家带来一篇将本地jar包安装进入maven仓库(实现方法)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

浅谈Java finally语句到底是在return之前还是之后执行(必看篇)

下面小编就为大家带来一篇浅谈Java finally语句到底是在return之前还是之后执行(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

基于Java并发容器ConcurrentHashMap#put方法解析

下面小编就为大家带来一篇基于Java并发容器ConcurrentHashMap#put方法解析。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解Spring Boot Profiles 配置和使用

本篇文章主要介绍了详解Spring Boot Profiles 配置和使用,具有一定的参考价值,有兴趣的可以了解一下
收藏 0 赞 0 分享

详解Spring Boot 属性配置和使用

本篇文章主要介绍了详解Spring Boot 属性配置和使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多