Vb.net Can';不要删除文件。另一进程正在使用的文件
我有一个下载文件的程序(简单文件更新程序)。在此之前,此文件的旧版本将排队等待删除。但如果我在文本编辑器中编辑此文件(保存并关闭),则我的程序拒绝删除它 我有这样的潜艇Vb.net Can';不要删除文件。另一进程正在使用的文件,vb.net,Vb.net,我有一个下载文件的程序(简单文件更新程序)。在此之前,此文件的旧版本将排队等待删除。但如果我在文本编辑器中编辑此文件(保存并关闭),则我的程序拒绝删除它 我有这样的潜艇 Private Sub delete_file(ByVal dir As String) Try If My.Computer.FileSystem.FileExists(dir) Then My.Computer.FileSystem.DeleteFile(dir) Catch ex As Ex
Private Sub delete_file(ByVal dir As String)
Try
If My.Computer.FileSystem.FileExists(dir) Then My.Computer.FileSystem.DeleteFile(dir)
Catch ex As Exception
Debug.WriteLine(ex.ToString())
Sleep(1000)
delete_file(dir)
End Try
End Sub
它永远不会退出递归。异常表示该文件正被其他进程使用,而等待不会改变任何东西。
有什么线索吗
[编辑]
更改了Sub一点,所以它在异常处理程序中不包含递归
Private Sub delete_file(ByVal dir As String)
Dim ok As Boolean = True
Try
If My.Computer.FileSystem.FileExists(dir) Then My.Computer.FileSystem.DeleteFile(dir)
Catch ex As Exception
Debug.WriteLine(ex.ToString())
ok = False
End Try
If ok = False Then
Sleep(1000)
delete_file(dir)
End If
End Sub
“另一个过程”这个词非常含糊不清
事实证明,我程序中的另一个函数是打开同一个文件两次,然后只关闭一次。修复了该问题后,删除它将删除该问题
因此,当您遇到相同错误时,请尝试在程序中搜索可能修改此文件的其他位置
感谢您的评论,他们肯定给了我一些关于优秀编程的提示。这可能是一个选项,您可以在文本编辑器中设置为在文件写入或读取时只打开一个句柄。此外,从异常处理程序中调用delete_file()是一个非常糟糕的主意。也许更改代码以通过计时器再次启动任务?文本编辑器就是一个例子。如果其他程序(自动)编辑此文件,同样的情况也会发生。此外,使用计时器不会阻止我的应用程序进一步运行(睡眠会阻止),因此它可能会表现得不合适。为什么要使用递归?你试过一个简单的while循环(里面有一个try块)吗?这样做,你也可以建立一个安全,如100次尝试后退出而不删除。