[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("文件已经打开或正在被使用","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 __________________________________________________________________________

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...