Проверьте, существует ли файл, затем повторите

У меня есть функция, которая проверяет наличие файла (возвращение file.exists(file)). Если он не существует, я отображаю сообщение об ошибке с параметрами Abort, Retry, Ignore.

Моя проблема в том, что я не могу повторить попытку.

Я попытался поместить код, чтобы проверить, существует ли файл в отдельной функции, а затем вызвал эту функцию из случая повторного выполнения оператора select case, но, похоже, он проходит мимо него (потому что он уже знает, что его не существует? Я попытался создать отдельный класс, содержащий функцию, чтобы проверить, существует ли файл, а затем каждый раз, когда я вызываю его, создавал новый экземпляр этого класса, но это не помогло.

Я что-то пропустил?

Я хочу, чтобы приложение продолжало проверять каждый раз, когда пользователь нажимает кнопку "Повторить", до тех пор, пока он не нажмет "Отмена" или "Игнорирование" (или, конечно, он найдет файл.

Как правильно обработать повтор?

Private Sub main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    If CheckFileExists() Then
     'do stuff here
    End If
End Sub

Private Function CheckFileExists()
    If Not FindFile() Then
        Select Case MessageBox.Show("Can't Find File", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Error)
            Case Windows.Forms.DialogResult.Abort
                End
            Case Windows.Forms.DialogResult.Retry
                Return FindFile()
            Case Windows.Forms.DialogResult.Ignore
                MessageBox.Show("Proceeding without file present")
                'do some other stuff
                Return True
            Case Else
                Return False
        End Select
    Else
        Return True
    End If
End Function

Private Function FindFile() As Boolean
    Return System.IO.File.Exist(path\file.ext)
End Function

Я также попытался поместить это в класс:

Private Function FindFile() As Boolean
    Dim fc As New FileCheck
    If Not fc.fnFileCheck() Then
        Return False
    Else
        Return True
    End If
End Function


Public Class FileCheck
Public Function fnFileCheck() As Boolean
    Return System.IO.File.Exist(path\file.ext)
End Function
End Class

1 ответ

Решение

Если вы хотите продолжать проверять файл до тех пор, пока не нажмете кнопку abort или ignore, я думаю, вам нужно позвонить CheckFileExists() вместо FindFile() в случае "повторной попытки"

Private Function CheckFileExists()
    If Not FindFile() Then
        Select Case MessageBox.Show("Can't Find File", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Error)
            Case Windows.Forms.DialogResult.Abort
                End
            Case Windows.Forms.DialogResult.Retry
                Return CheckFileExists()
            Case Windows.Forms.DialogResult.Ignore
                MessageBox.Show("Proceeding without file present")
                'do some other stuff
                Return True
            Case Else
                Return False
        End Select
    Else
        Return True
    End If
End Function
Другие вопросы по тегам