Поиск по расширениям файлов 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);
}