VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > VB.net教程 >
  • 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

相关教程