-
VB.NET检测文件是否已经打开或被其他进程占用
检测文件是否已经打开或被其他进程占用
在VB.NET保存文件时,不禁产生这样一个疑问,如果想保存的这个文件覆盖先前已经存在的文件,但这个文件已经被打开,程序运行会出错,如何检测保存的这个文件已经已经打开或者被其他进程占用并且提示这个错误?
一、本文主要解决问题
1、检测当前路径下保存的文件是否已经打开或被占用
2、不同文件下,文件名相同的两个文件出现误判的情况
二、解决方法
经过初步的学习,目前两个可以探索或者可以实现的方法
1、检测计算机进程中是否存在这个事件
2、以独占的方法打开文件
方法一
既然要检测已知文件是否已经打开,可以直接利用计算机进程来解答,检测当前任务管理器中是否存在该事件,如果存在,可以判定文件已经打开或者被占用。
部分代码:
SaveFileDialog1.Filter = "所有文件|*.text"
SaveFileDialog1.FilterIndex = 1
SaveFileDialog1.ShowDialog()
TextBox2.Text = SaveFileDialog1.FileName
Dim filename As String = TextBox3.Text
Dim pp() As Process = Process.GetProcesses '获取进程
Dim p As Process
For i = 0 To pp.Length - 1
p = pp(i)
If p.MainWindowTitle.Contains(filename) Then
MsgBox("文件打开或被其他程序占用,请关闭后重试!")
Exit Sub
ElseIf p.MainWindowTitle.Contains(filenamee) Then
MsgBox("该文件对应的误差补偿表文件打开或被其他程序占用,请关闭后重试!")
Exit Sub
End If
Next
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
所用控件:SaveFileDialog、TextBox
存在问题:这个代码虽然能够直接检测文件是否已经打开或者被占用的情况,但出现了一个明显的问题,它只能检测这个文件名是否出现被打开或被占用的问题,因此,在其他文件路径下打开这个文件时,想在这个文件夹下以相同文件名保存文件时,会出现误判的情况。
解决思路:找到这个运行进程对应的文件名所在的路径是否是当前的路径,如果是,说明文件已经打开或被占用,如果不是可以正常保存。
方法二
某些文件类型如果打开,对这个文件进行删除复制粘贴或者独占方式打开时,会出现问题。因此,可以利用这个检测问题是否存在来判断。
部分代码:
SaveFileDialog1.Filter = "所有文件|*.xps"
SaveFileDialog1.FilterIndex = 1
SaveFileDialog1.ShowDialog()
TextBox2.Text = SaveFileDialog1.FileName
'如果当前保存的文件已经打开或被其他程序占用时, 显示错误
If Dir(TextBox2.Text) <> "" Then '判断当前文件夹下该文件存不存在,如果存在,执行里面内容
If Fileisopen(TextBox2.Text) = True Then
MsgBox("该文件已经打开或被其他程序占用,请关闭后重试!")
Exit Sub
End If
End If
’以独占的方式打开文件,来检测问题
Private Function Fileisopen(ByVal Filepath As String) As Boolean
On Error GoTo erropen
Dim Ffile As New FileStream(Filepath, FileMode.Open, FileAccess.Read, FileShare.None)
Ffile.Close()
Ffile.Dispose() '释放相关资源,此语句为必要语句,不然在某种特殊情况下出现误判
Exit Function
erropen:
Fileisopen = True
End Function
所用控件:SaveFileDialog、TextBox
注释说明:判断当前文件路径下是否存在这个文件,如果不存在,则直接跳过,如果存在,再进行判断。否则自定义函数会出现,当文件夹下不存在这个文件时,以独占方式打开这个不存在的文件会出现误判的情况,会出现提示框。
找到另外一个解决的办法,不过有一定的局限性。参见以下文档:
.net解决保存文件名冲突的巧妙方法
由于楼主尚在学习当中,因此代码如果有改进之处,请不吝赐教,谢谢!
————————————————
版权声明:本文为CSDN博主「qq_44143897」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_44143897/article/details/111185967
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式