VB.NET получает сообщения об ошибках для каждого цикла - PullRequest
0 голосов
/ 20 ноября 2018

Я кодировал базовый сценарий для перечисления всех файлов в каталоге, используя цикл for each следующим образом:

'imports system.io is required,
Dim test As String 'string
    On Error Resume Next 'error handling
    For Each file In IO.Directory.GetFiles("C:\Program Files", "*", IO.SearchOption.AllDirectories) 'gets file pathfor each file in folder(s)
        test = test + file 'sets variable value to path
    Next 'loop until all files and sub-folders in the path have been searched
    RichTextBox1.Text =  test + " finished" 'show file names + path.

Проблема возникает, когда есть отказ в доступе к файлу, обработчик ошибок выдаетв и заканчивается цикл.Есть ли способ получить код, чтобы пропустить текущую папку и перейти к следующей, если произошла ошибка?Я бы использовал оператор try catch endtry, если ошибка произошла в цикле, но, как это происходит в операторе for each, я предположил, что On Error Resume Next будет работать.

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Не знаю, с какой ошибкой вы сталкиваетесь, но здесь есть несколько примеров того, как сделать io здесь:

Как выполнить базовый файловый ввод / вывод в Visual Basic 2005 или Visual Basic.NET

Список файлов В этом примере кода для получения списка файлов используется метод GetFiles класса Directory.

Dim file As String
Me.ListBox1.Items.Clear()
Dim files() As String = Directory.GetFiles(winDir)
For Each file In files
    Me.ListBox1.Items.Add(file)
Next

ДалееМногие вещи могут пойти не так, когда пользователь получает доступ к файлам.Файлы могут не существовать, файлы могут использоваться или пользователи могут не иметь прав на файлы папок, к которым они пытаются получить доступ.Важно учитывать эти возможности при написании кода и обрабатывать исключения, которые могут быть сгенерированы.

0 голосов
/ 20 ноября 2018

Вы можете написать собственное перечисление:

Dim MoveResult As Boolean
Dim fileEnumerator = IO.Directory.GetFiles("C:\Program Files", "*", IO.SearchOption.AllDirectories).GetEnumerator()
Dim result As new StringBuilder()

Try
    MoveResult = fileEnumerator.MoveNext()
Catch
    MoveResult = True
End Try

While MoveResult
    result.Append(fileEnumerator.Current)

    Try
        MoveResult = fileEnumerator.MoveNext()
    Catch
        MoveResult = True
    End Try
End While

RichTextBox1.Text =  result.ToString() + " finished" 

Но все это кажется плохой идеей.У стандартных учетных записей пользователей ограничен доступ к папке с программными файлами.Так было с Windows 2000, и на то есть веские причины.Ничего хорошего не получится от того, что вы там будете.В лучшем случае все, что вы надеялись выполнить, пройдя через эту папку, будет подорвано пропуском тех файлов, которые наиболее вероятно будут представлять интерес.

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