2010-09-03 98 views
1

我正在使用以下代碼來獲取目錄信息。它可以很好地工作,如果我搜索到很多目錄。 但是,當我搜索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

您的代碼有效!謝謝,但有很多文件夾被拒絕訪問。這是不可能命名每個人和每個人的。 我需要找到其他方法。 謝謝任何​​方式 – 2010-09-03 14:58:01

0

不幸的不是。你必須通過做自己的遞歸來解決這個問題,你可以添加自己的異常處理程序來忽略這些錯誤。