Поиск по расширениям файлов VB.NET

Привет всем, я пытался найти в указанном каталоге и во всех подкаталогах все файлы с указанным расширением. Однако команда inbuilt бесполезна, так как она вызывает ошибки и умирает, если у вас нет доступа к каталогу. Итак, вот что у меня есть на данный момент:

 Private Function dirSearch(ByVal path As String, Optional ByVal searchpattern As String = ".exe") As String()
    Dim di As New DirectoryInfo(path)
    Dim fi As FileInfo
    Dim filelist() As String
    Dim i As Integer = 0
    For Each fi In di.GetFiles
        If System.IO.Path.GetExtension(fi.FullName).ToLower = searchpattern Then
            filelist(i) = fi.FullName
            i += 1
        End If
    Next
    Return filelist
 End Function

Однако я получаю "System.NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта". когда я пытаюсь получить доступ к данным, хранящимся в массиве строк списка файлов.

Есть идеи, что я делаю не так?

2 ответа

Решение

Вы не создали экземпляр Dim filelist() As String массив. Пытаться di.GetFiles(searchPattern)

Dim files() as FileInfo = di.GetFiles(searchPattern)

Используйте статический метод Directory.GetFiles, который возвращает строку массива

Dim files =  Directory.GetFiles(Path,searchPattern,searchOption)

Демо-версия:

 Dim files() As String
 files = Directory.GetFiles(path, "*.exe", SearchOption.TopDirectoryOnly)
 For Each FileName As String In files
     Console.WriteLine(FileName)
 Next

Рекурсивный обход каталога:

   Sub Main()
        Dim path = "c:\jam"
        Dim fileList As New List(Of String)

        GetAllAccessibleFiles(path, fileList)

        'Convert List<T> to string array if you want
        Dim files As String() = fileList.ToArray

        For Each s As String In fileList
            Console.WriteLine(s)
        Next
    End Sub

    Sub GetAllAccessibleFiles(path As String, filelist As List(Of String))
        For Each file As String In Directory.GetFiles(path, "*.*")
            filelist.Add(file)
        Next
        For Each dir As String In Directory.GetDirectories(path)
            Try
                GetAllAccessibleFiles(dir, filelist)
            Catch ex As Exception

            End Try
        Next
    End Sub

Используйте метод System.IO.Directory.EnumerateFiles и передайте SearchOption.AllDirectories для обхода дерева с использованием определенного шаблона поиска. Вот пример:

foreach (var e in Directory.EnumerateFiles("C:\\windows", "*.dll", SearchOption.AllDirectories))
{
    Console.WriteLine(e);
}
Другие вопросы по тегам