[VB.NET]vb.net中如何检测一个已知的文件是否已经被打开或者被其他应用程序调用

vb.net中如何检测一个已知的文件是否已经被打开或者被其他应用程序调用
vb.net中如何检测一个已知的文件是否已经被打开或者被其他应用程序调用,急。。。
__________________________________________________________________________
试试看下面代码

Dim fileName As String
Try
Dim aa As New System.IO.FileStream(fileName, IO.FileMode.OpenOrCreate, IO.FileAccess.ReadWrite, IO.FileShare.None)
If aa.CanWrite = False Then
MsgBox(fileName + " is opened")
Else
MsgBox("ok")
End If
Catch ex As Exception
MsgBox(ex.Message.ToString)
End Try
__________________________________________________________________________
LS的我觉得不妥,如果文件是只读文件的话,CanWrite应该都返回false,也就是说无法判断是不是有其他人打开了此文件
__________________________________________________________________________
我差了下资料,LZ可以试试看
用FileCopy复制你要打开的文件,捕捉它的异常,如果它的异常错误号是55的话,说明文件已打开,所以不能赋值,通过这个,可以判断这个文件是不是已经打开了,具体代码我等下写一个,再贴上来
__________________________________________________________________________
lZ,我测试了一下,貌似用其他工具先打开文件的话好像本程序无法判断
不过我想方法是有的,我也等着学习先^_^
__________________________________________________________________________
我用file.delete(path)方法去删除一个已经打开的文件,文件表面上是被删除了,但是在电脑还是打开的,(我的电脑上删除文件不会弹出“确认文件删除”对话框,不知道是不是跟这个有关系?)VS也没有报告有什么异常,有异常就好了,可以捕捉这个异常。
__________________________________________________________________________
县判断有没有文件,若有则进行剪切操作,能剪切,说明没有被打开。

VB.NET code


If FileIO.FileSystem.FileExists(filename) Then
Else

MsgBox("文件不存在")
Exit Sub
End If

dim path as string
path="c:/temp"
On Error GoTo opend
FileIO.FileSystem.MoveFile(filename, path)

FileIO.FileSystem.MoveFile(path,filename)
MsgBox("文件未打开")

Exit Sub
opend:
MsgBox("文件打开")
__________________________________________________________________________
有点乱,你凑合看~
__________________________________________________________________________
基本上被其他进程调用的话,也是不能剪切的吧。。。。(个人猜测,搂主自己试试吧。。。^.^)
__________________________________________________________________________
这要看怎么理解这个“打开”。

可以象一楼的办法那样,尝试独占打开一个文件,如果不行,可以推测该文件正在使用中

VB.NET code Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Using d As New OpenFileDialog
If d.ShowDialog = Windows.Forms.DialogResult.OK Then
Console.WriteLine(IsOpened(d.FileName))
End If
End Using
End Sub

Public Shared Function IsOpened(ByVal filename As String) As Boolean
Try
Dim aa As New System.IO.FileStream(filename, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.None)
aa.Dispose()

Return True
Catch ex As Exception
Return False
End Try

End Function



但有一些,是貌似“打开”的情形,如用记事本打开一个文本文件,你是无法判断的。
__________________________________________________________________________
学习了
__________________________________________________________________________
Dim file As String
file = "c:/1.doc"
If FileIO.FileSystem.FileExists(file) Then
Else
MsgBox("文件不存在", MsgBoxStyle.OkCancel, "Error")
Exit Sub
End If
Try
FileIO.FileSystem.DeleteFile(file)''试着去去删除此文件
Catch ex As Exception''捕捉删除时的异常
MsgBox("文件已经打开或正在被使用", MsgBoxStyle.OkCancel, "Error")
End Try
但是如果你删除的是txt文本文件的话,好像不会出现异常,刚开始我是用txt试验的,可以删除一个正在被使用的txt文档而不报告异常。
__________________________________________________________________________
txt文件。。。。。。可以打开n多,随便删除。。。。。你要是针对txt的话,最好是研究下txt文件的原理,针对原理进行下判断。。。。不能简单的使用文件系统
__________________________________________________________________________
用这个吧,判断系统进程中是否含有这个文件的进程。这样应该完全可以判断文件是否被打开了


VB.NET code

Dim filename As String = "02.xls"
Dim ps() As Process = Process.GetProcesses
Dim p As Process
For i = 0 To ps.Length - 1
p = ps(i)

If p.MainWindowTitle.Contains(filename) Then
MsgBox("文件打开")
End If

Next
__________________________________________________________________________
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值