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

ttkl377 2008-04-16 10:57:58
vb.net中如何检测一个已知的文件是否已经被打开或者被其他应用程序调用,急。。。
...全文
1194 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yiyaoyao58958 2008-04-18
  • 打赏
  • 举报
回复
用这个吧,判断系统进程中是否含有这个文件的进程。这样应该完全可以判断文件是否被打开了



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


yiyaoyao58958 2008-04-18
  • 打赏
  • 举报
回复
txt文件。。。。。。可以打开n多,随便删除。。。。。你要是针对txt的话,最好是研究下txt文件的原理,针对原理进行下判断。。。。不能简单的使用文件系统
ttkl377 2008-04-18
  • 打赏
  • 举报
回复
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文档而不报告异常。
steven_srl 2008-04-17
  • 打赏
  • 举报
回复
lZ,我测试了一下,貌似用其他工具先打开文件的话好像本程序无法判断
不过我想方法是有的,我也等着学习先^_^
steven_srl 2008-04-17
  • 打赏
  • 举报
回复
我差了下资料,LZ可以试试看
用FileCopy复制你要打开的文件,捕捉它的异常,如果它的异常错误号是55的话,说明文件已打开,所以不能赋值,通过这个,可以判断这个文件是不是已经打开了,具体代码我等下写一个,再贴上来
steven_srl 2008-04-17
  • 打赏
  • 举报
回复
LS的我觉得不妥,如果文件是只读文件的话,CanWrite应该都返回false,也就是说无法判断是不是有其他人打开了此文件
jikun6666 2008-04-17
  • 打赏
  • 举报
回复
学习了
水如烟 2008-04-17
  • 打赏
  • 举报
回复
这要看怎么理解这个“打开”。

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


但有一些,是貌似“打开”的情形,如用记事本打开一个文本文件,你是无法判断的。
yiyaoyao58958 2008-04-17
  • 打赏
  • 举报
回复
基本上被其他进程调用的话,也是不能剪切的吧。。。。(个人猜测,搂主自己试试吧。。。^.^)
whatinrain 2008-04-17
  • 打赏
  • 举报
回复
试试看下面代码

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
yiyaoyao58958 2008-04-17
  • 打赏
  • 举报
回复
有点乱,你凑合看~
yiyaoyao58958 2008-04-17
  • 打赏
  • 举报
回复
县判断有没有文件,若有则进行剪切操作,能剪切,说明没有被打开。



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("文件打开")
ttkl377 2008-04-17
  • 打赏
  • 举报
回复
我用file.delete(path)方法去删除一个已经打开的文件,文件表面上是被删除了,但是在电脑还是打开的,(我的电脑上删除文件不会弹出“确认文件删除”对话框,不知道是不是跟这个有关系?)VS也没有报告有什么异常,有异常就好了,可以捕捉这个异常。

16,717

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧