2010-09-03 2 views
1

Я использую следующий код для получения информации о каталоге. он работает хорошо, если я ищу файл forpleveldirectory. Но когда я просматриваю alldirectories, он достигает информации о системном уровне и выдает ошибку. Есть ли способ избежать поиска информации на системной информации? СООБЩЕНИЕИзбегайте системной папки с информацией об объеме

Imports System.IO 
Public Class Form1 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     Dim di As New DirectoryInfo("d:\"), i As Integer 
     Dim aryFiles() As FileInfo = di.GetFiles("*.doc", SearchOption.TopDirectoryOnly) 
     For i = LBound(aryFiles) To UBound(aryFiles) 
      MsgBox(aryFiles(i).FullName) 
     Next i 
    End Sub 
End Class 

ответ

0

Этот код должен сделать трюк для вас.

Imports System.IO 

Module Module1 

    Sub Main() 
     Dim folders = New DirectoryInfo("D:\").GetDirectories 
     Dim files = New List(Of FileInfo) 

     For Each folder In From d In folders Where d.Name <> "System Volume Information" 
      files.AddRange(folder.GetFiles("*.doc", SearchOption.TopDirectoryOnly)) 
     Next 

     For Each File In files 
      MsgBox(File.FullName) 
     Next 
    End Sub 

End Module 

Я предполагаю, что ваш проект .NET 3.5 или выше. Сообщите мне, если предположение неверно.


Редактировать
Поскольку вы просили за него, я взломал вместе код, чтобы автоматически пропускать недоступные папки. Я не тестировал код, поэтому я не могу гарантировать, что он будет без ошибок.

Imports System.IO 

Module Module1 

    Sub Main() 
     Dim folders = GetAllSubFolders("D:\Alex\Music") 
     Dim files = New List(Of FileInfo) 

     For Each folder In folders 
      files.AddRange(folder.GetFiles("*.doc", SearchOption.TopDirectoryOnly)) 
     Next 

     For Each File In files 
      Console.WriteLine(File.FullName) 
     Next 

     Console.ReadLine() 
    End Sub 

    Function GetAllSubFolders(ByVal path As String) As IEnumerable(Of DirectoryInfo) 
     Dim subFolders As New List(Of DirectoryInfo) 

     Try 
      subFolders.AddRange(New DirectoryInfo(path).GetDirectories()) 
     Catch ex As Exception 
      'error handling code goes here' 
     End Try 

     Dim innerSubFolders As New List(Of DirectoryInfo) 
     For Each folder In subFolders 
      innerSubFolders.AddRange(GetAllSubFolders(folder.FullName)) 
     Next 

     'add the inner sub folders' 
     subFolders.AddRange(innerSubFolders) 

     'return the directories' 
     Return subFolders 
    End Function 

End Module 
+0

Ваш код работает! Спасибо, но есть много папок, которые отказались предоставить доступ. Это невозможно назвать всех и каждого. Мне нужно найти другой метод. Спасибо любым способом –

0

К сожалению, нет. Вам придется обойти это, выполнив собственную рекурсию, где вы можете добавить свои собственные обработчики исключений, чтобы игнорировать эти ошибки.

Смежные вопросы