/ / Pętla na zabezpieczonych plikach systemowych bez rzucania i wyjątków za pośrednictwem Directory.GetFiles () [duplicate] - .net, vb.net

Pętla na zabezpieczonych plikach systemowych bez wyrzucania i wyjątków za pośrednictwem Directory.GetFiles () [duplicate] - .net, vb.net

Możliwe duplikaty:
Ignoruj ​​foldery / pliki, gdy nie można uzyskać dostępu do Directory.GetFiles ()

Mam ten przykład, który zapętla pliki w określonym folderze.

Imports system.IO
Dim Files() as string = Directory.GetFiles("D:example","*.*",SearchOption.AllDirectories)
For Each S As String in Files
Listbox1.Items.Add(S)
Next

Do tego momentu wszystko jest w porządku. ALE PROBLEM JEST TUTAJ: Jeśli użytkownik wybierze najwyższy folder (jak dysk "D:") Kod będzie następujący:

Imports system.IO
Dim Files() as string = Directory.GetFiles("D:","*.*",SearchOption.AllDirectories)
For Each S As String in Files
Listbox1.Items.Add(S)
Next

Proplem będzie wyjątkiem[UnauthorizedAccessException], ponieważ pętla dotarła do zabezpieczonego folderu "Informacje o woluminie systemu", a program zostanie zatrzymany. Muszę pominąć ten wyjątek i utworzyć pętlę kodu dla każdego pliku z wyjątkiem chronionych plików i folderów, takich jak informacje o woluminie systemowym.

Przepraszamy za niedogodności....

Odpowiedzi:

0 dla odpowiedzi № 1
Imports System.IO

Public Class Form1

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim strFileList(-1) As String
Call GetAllFiles("C:", "*.*", strFileList)

ListBox1.ClearSelected()
For Each s As String In strFileList
ListBox1.Items.Add(s)
Next s
End Sub

Public Sub GetAllFiles(folder As String, searchPattern As String, ByRef fileList() As String)
"First add all files in the current folder
Dim strFiles(-1) As String
Try
strFiles = Directory.GetFiles(folder, searchPattern, SearchOption.TopDirectoryOnly)
Catch ex As Exception
End Try
If strFiles.GetUpperBound(0) >= 0 Then
Dim intStartIndex As Integer = fileList.GetUpperBound(0) + 1
ReDim Preserve fileList(fileList.GetUpperBound(0) + strFiles.GetUpperBound(0) + 1)
For i As Integer = 0 To strFiles.GetUpperBound(0)
fileList(intStartIndex + i) = strFiles(i)
Next i
End If
"Next go through all folders
Dim strFolders(-1) As String
Try
strFolders = Directory.GetDirectories(folder, "*.*", SearchOption.TopDirectoryOnly)
Catch ex As Exception
End Try
If strFolders.GetUpperBound(0) >= 0 Then
For Each strFolder As String In strFolders
Call GetAllFiles(strFolder, searchPattern, fileList)
Next strFolder
End If
End Sub

End Class