Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net Can';不要删除文件。另一进程正在使用的文件_Vb.net - Fatal编程技术网

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次尝试后退出而不删除。