Удалите файл, используемый другим процессом в vb.net / framework 2.0 - PullRequest
0 голосов
/ 11 июня 2018

У меня есть программа, которая наблюдает, есть ли файл с определенным именем в определенной директории.FileStream создается с помощью команды sequent:

fs = File.Open(PathK, FileMode.Append, FileAccess.Write, FileShare.None)

Через полчаса программа закрывает, удаляет и уничтожает текстовый файл, а затем закрывает себя, вызывая другую программу длясоздайте другой процесс и закройте старый.

Иногда этого не происходит.Файл не может быть удален, и это вызывает ошибку.После этого программа закрывается и продолжает процедуру перезапуска.но когда он запускается сам, он проверяет, существует ли этот конкретный файл, и он есть, потому что он не может его убить.Теперь я могу сделать File.OpenRead для этого файла, так что старый файловый поток старого процесса не запущен, что означает, что старый процесс выключен.Но я все еще не могу убить его!

это начальный код:

Private Sub Verifica_PID_Aperti()
    Dim Tentativi As Integer = 0

    PidAlreadyOpen = 0


    'file exist ?
    If File.Exists(PathK) = True Then

        Try
            'can i read it?
            File.OpenRead(PathK)
        Catch ex As Exception
            'if it's locked than there is another PID active right now, stop this process
            Settaggi.lStop = 1
            PidAlreadyOpen = 1
            Exit Sub
        End Try

        'not locked? than it's a bug and the file is still open, try to delete
        While (Tentativi < 1000)

            Try
                File.Delete(PathK)
                Tentativi = 1000

            Catch ex As Exception
                Tentativi = Tentativi + 1
            End Try
        End While

        'is him still alive?
        If File.Exists(PathK) Then
            'if yes, there is an error, sand a mail and close yourself
            Dim pf As New Send_Mail
            pf.Invio_Mail_Automatico_EDP(999, "ERRORECHIUSURA", Err.Description & " - " & PathK, "", Settaggi.lPID)
            pf = Nothing
            Settaggi.lStop = 1
            PidAlreadyOpen = 1
            Exit Sub
        Else
            'ok, if it does not exists anymore, create another one
            fs = File.Open(PathK, FileMode.Append, FileAccess.Write, FileShare.None)
        End If
    Else
        'no file ? than create it
        fs = File.Open(PathK, FileMode.Append, FileAccess.Write, FileShare.None)
    End If

End Sub

и вот код для процедуры перезапуска:

    If PidAlreadyOpen = 0 Then
        'close and clean

        fs.Close()
        fs.Dispose()

    End If

    Threading.Thread.Sleep(1000)

    Dim Chiusura As Integer = 0

    While Chiusura < 1000
        Try
            'try to delete

            File.Delete(PathK)

            If TimeToReboot = 1 Then
                System.Diagnostics.Process.Start(Application.ExecutablePath, "/noservice /release /PID:" & Settaggi.lPID)
            End If
        Catch ex As Exception

            Chiusura = Chiusura + 1
            ' not deleted ? send an email, and don't stop yourself
            If Chiusura = 999 Then
                Dim pf As New Send_Mail
                pf.Invio_Mail_Automatico_EDP(999, "ERRORECHIUSURA", Err.Description & " - " & PathK, "", Settaggi.lPID)
                pf = Nothing
                Exit Sub
            End If
            Threading.Thread.Sleep(100)
        End Try
        'deleted? than stop the loop
        If Not File.Exists(PathK) Then
            Chiusura = 1000
        End If

    End While

    Me.Close()

howКак вы думаете, я должен решить эту проблему?

1 Ответ

0 голосов
/ 11 июня 2018

Я не думаю, что вы многое можете здесь сделать.В прошлом у меня были похожие проблемы, и я обнаружил, что, хотя удалить файл невозможно, его можно переименовать.В зависимости от ситуации вы можете переименовать файл и открыть новый файл с таким именем.В дальнейшем вам также потребуется проверить, используется ли переименованный файл, и удалить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...