C# 检测文件是否被其他进程占用
我们在项目中经常会对文件进行增删改的操作。如果文件被占用,进行删除移动等操作时,会抛出异常,我们可以对其进行检测,对用户进行提醒。
在http://blog.csdn.net/snakorse/article/details/19581329看到了如下的用法:
添加命名空间: using System.Runtime.InteropServices;
在类里面添加: //2018-1-19 文件操作 判断文件是否被占用[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 btnDelete_Click(object sender, RoutedEventArgs e){int[] _intRow = this.tableView1.GetSelectedRowHandles();if (_intRow == null || _intRow.Length <= 0 || _intRow[0] < 0){MessageBox.Show("请选择你需要删除的数据!", "提示", MessageBoxButton.OK, MessageBoxImage.Information);}else{if (MessageBox.Show(this, "是否删除所选的图片?", "提示", MessageBoxButton.YesNo, MessageBoxImage.Question) == System.Windows.MessageBoxResult.Yes){for (int i = 0; i < _intRow.Length; i++){object str = gridImgData.GetCellValue(_intRow[i], "VarPath"); //判断文件是否占用IntPtr vHandle = _lopen(str.ToString(), OF_READWRITE | OF_SHARE_DENY_NONE);if (vHandle == HFILE_ERROR)//被占用{if (MessageBox.Show("该图片在工程中已使用,是否确定移动或删除的操作?", "提示", MessageBoxButton.YesNo, MessageBoxImage.Question) == System.Windows.MessageBoxResult.Yes){try{if (File.Exists(str.ToString()))//如果存在文件 {File.Delete(str.ToString());}tableView1.DeleteRow(_intRow[i]);//删除列表上的记录 }catch (Exception ex){string strmsg = string.Format("图片删除失败,原因:{0}", ex.Message);MessageBox.Show(strmsg, "提示", MessageBoxButton.OK, MessageBoxImage.Information);}}else//未被占用{return;}}else{try{if (File.Exists(str.ToString()))//如果存在文件 {File.Delete(str.ToString());}tableView1.DeleteRow(_intRow[i]);//删除列表上的记录 }catch (Exception ex){string strmsg = string.Format("图片删除失败,原因:{0}", ex.Message);MessageBox.Show(strmsg, "提示", MessageBoxButton.OK, MessageBoxImage.Information);}}}}}}
转载于:https://www.cnblogs.com/hllxy/p/8317637.html
C# 检测文件是否被其他进程占用相关推荐
- 易语言取c盘文件夹中的文件被占用,易语言检测文件被哪个进程占用的代码
易语言检测文件被哪个进程占用的代码 检测文件占用的代码 此功能需要加载贝贝吧模块6.6 .版本 2 .支持库 eAPI .程序集 窗口程序集_启动窗口 .子程序 _查询按钮_被单击 .局部变量 进程名 ...
- linux fuser 命令 查看文件/网络端口 被什么进程占用
linux环境下,当使用umount命令卸载挂载点时,会遇到"device is busy"提示,这时fuser就能查出谁在使用这个资源;当然umount –lf [挂载点] 也 ...
- windows 技巧篇-查看文件夹被那个进程占用,文件夹占用解除方法
有时候我们关闭程序后,发现之前被程序占用的文件夹还是被占用状态. 因为一些程序逻辑不完善的原因,常规的关闭并没有彻底的杀死进程. 下面给大家介绍下查看占用文件夹进程的方法. 第一步: 在任务管理器性能 ...
- java 删除文件失败_java 文件删除失败(被进程占用)
解决方案:系统进行资源强制回收//System.gc();{不建议使用} 关闭流(未及时关闭会内存溢出) 问题--- 文件删除失败 (后来发现是被进程占用) 发现问题--第一次测试10个文件上传成功8 ...
- lsof查看进程占用文件_Linux 利用lsof命令查找已经删除的文件来释放磁盘空间
测试环境一台服务器/ 根目录空间使用率达到94%,但是通过du -sh * 发现实际空间没没用用到那么多,初步怀疑,之前删除的文件,有运行中的进程一直占用,导致空间没有释放,如图通过du -sh * ...
- 易语言取c盘文件夹中的文件被占用,win7系统怎么快速找出文件被什么进程占用|win7解除文件占用的方法...
很多时候我们想删除文件或文件夹的时候,会出现文件正在使用的提示导致文件无法删除,如果知道是什么程序在使用这个文件好,但多数时候我们并不知道是被什么程序占用,那么在win7系统怎么快速找出文件被什 ...
- 任务管理器中查看文件被哪个进程占用
我们应该会经常遇到这样的情况,当删除一个文件或者文件夹时,提示无法删除,文件被占用:但是提示信息中有时并未给出是被哪个进程所占用,如果能找出文件被哪个进程占用,然后杀死相应的进程,文件就能被删除. 写 ...
- 解决Linux删除用户时进程占用,及新建账户提示主目录已存在、信箱文件已存在的问题
解决Linux删除用户时提示进程占用(currently used by process) 文章目录 解决Linux删除用户时提示进程占用(currently used by process) 运行环 ...
- Python读取大文件的坑与内存占用检测
Python读取大文件的"坑"与内存占用检测 1.read()与readlines() with open(file_path, 'rb') as f:sha1Obj.update ...
最新文章
- ffmpeg为AVPacket添加解码头信息
- html5爆款游戏,精华盘点:2018年的十款“爆款”独立游戏,你都玩过吗?
- Springboot里输出的html里包含script标签页会怎样
- 2 JVM 运行机制
- mysql集群之keepalived简单搭建
- LeetCode 557. Reverse Words in a String III
- python异常处理与上下文管理器
- git remote: Permission to denied
- 解决QSqlTableModel::setData()崩溃的问题
- Java使用OpenOffice实现Office系列文件转Pdf
- J2EE框架技术(SpringMVC) 知识点笔记(1)
- 破解网址_中国目前的破解组织大全
- sharepoint对nodejs的要求
- 计算机丢失mscvr,教大家计算机丢失Msvcr100.dll的解决方法
- 旧时王谢堂前燕,飞入寻常百姓家
- 7z001怎么解压在安卓手机上面_安卓手机时间怎么显示在中间 时间居中设置教程...
- 2010年一句话破解QQ密码!
- (轉貼) LCD入門常識
- MybatisPlus多表联查分页多条件查
- JavaScript通过下标获取对象(字典)指定键和值