博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 检测文件是否被其他进程占用
阅读量:6326 次
发布时间:2019-06-22

本文共 3417 字,大约阅读时间需要 11 分钟。

我们在项目中经常会对文件进行增删改的操作。如果文件被占用,进行删除移动等操作时,会抛出异常,我们可以对其进行检测,对用户进行提醒。

在看到了如下的用法:

添加命名空间: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

你可能感兴趣的文章
在XML里的XSD和DTD以及standalone的使用3----具体使用详解
查看>>
《微信小程序七日谈》- 第四天:页面路径最多五层?导航可以这么玩
查看>>
linux用户密码生成
查看>>
Python图像处理(11):k均值
查看>>
注解总结
查看>>
微信公众号特异功能列表
查看>>
36.Node.js 工具模块--OS模块系统操作
查看>>
Python之cv2
查看>>
函数的泛型约束是函数签名的一部分,不符合约束的初始调用将不能查找到函数(报错)...
查看>>
《Android学习指南》分享给大家
查看>>
WayOs 各个版本:包括完美破解版、内置重启版、内置免拉黑、OEM
查看>>
浏览器内核及渲染过程介绍
查看>>
clear .svn folder use bat
查看>>
c++ 类 总结
查看>>
java日期转字符串 字符串转日期 日期转日历 日历转日期
查看>>
hdu 2413(最大匹配+二分)
查看>>
ASP.NET Cookie概念、CURD操作、原理、实际运用
查看>>
vc++ 判断文件或是文件夹是否存在,比较好的做法
查看>>
(hdu step 8.1.1)ACboy needs your help again!(STL中栈和队列的基本使用)
查看>>
CentOS7 iso封装语句
查看>>