Я использую следующие функции для поиска определенных файлов на всех дисках, расположенных в системе, и он не прерывается, когда «GetFiles» срабатывает. Это делается путем выполнения поиска только верхнего уровня с помощью «GetDirectories», который даст вам список каталогов базового уровня, и, если он не выбрасывает исключение, выполняется поиск «GetFiles» по всем подкаталогам этого каталога, если это исключение затем нажмите, затем каталог «GetDirectories», и процесс продолжается. После каждого успешного поиска, выполненного GetFiles, каталоги, содержащие файлы, которые были найдены, сохраняются в списке. После того как все существующие диски, расположенные в системе, были найдены, основная функция завершает свою работу, возвращая данные, добавленные в список.
Public Function Left(ByVal TextString As String, ByVal LocateString As String) As String
Try
Left = Microsoft.VisualBasic.Left(TextString, InStrRev(TextString, LocateString) - 1)
Catch ex As Exception
Left = TextString
End Try
End Function
Public Function GetExistingDrives() As List(Of String)
Dim LocatedDrives As New List(Of String), DriveInformation As System.IO.DriveInfo() = System.IO.DriveInfo.GetDrives
For Each FoundDrive As System.IO.DriveInfo In DriveInformation
Try
LocatedDrives.Add(UCase(Left(FoundDrive.Name, "\")))
Catch ex As Exception
End Try
Next
GetExistingDrives = LocatedDrives
End Function
Public Function LocateFiles(ByVal ParamArray SearchPattern As String()) As List(Of String)
Dim LocatedDirectoriesList As New List(Of String), LocatedFilenameList As System.Collections.ObjectModel.ReadOnlyCollection(Of String)
For Each DriveLetter In GetExistingDrives()
Try
For Each SearchDirectory As String In My.Computer.FileSystem.GetDirectories(DriveLetter, FileIO.SearchOption.SearchTopLevelOnly)
Try
LocatedFilenameList = My.Computer.FileSystem.GetFiles(SearchDirectory, FileIO.SearchOption.SearchAllSubDirectories, SearchPattern)
Catch ex As Exception
End Try
If (LocatedFilenameList.Count <> 0) Then
For Each LocatedFilename As String In LocatedFilenameList
Dim LocatedDirectory As String = Left(LocatedFilename, "\")
If (LocatedDirectoriesList.IndexOf(LocatedDirectory) = -1) Then LocatedDirectoriesList.Add(LocatedDirectory)
Next
End If
Next
Catch ex As Exception
End Try
Next
LocateFiles = LocatedDirectoriesList
End Function