2012-09-19 34 views
0

可能重複:
Ignore folders/files when Directory.GetFiles() is denied access環路上的安全系統文件未拋出和異常經由Directory.GetFiles()

我有這個例子上在一個特定的文件夾中的文件循環。

Imports system.IO 
Dim Files() as string = Directory.GetFiles("D:\example","*.*",SearchOption.AllDirectories) 
For Each S As String in Files 
Listbox1.Items.Add(S) 
Next 

到那時,一切都沒問題。 但問題轉至此處: 如果用戶選擇一個頂層文件夾(像驅動器「d:\」) 的代碼將是如下:

Imports system.IO 
    Dim Files() as string = Directory.GetFiles("D:\","*.*",SearchOption.AllDirectories) 
    For Each S As String in Files 
    Listbox1.Items.Add(S) 
    Next 

的proplem將是一個例外[UnauthorizedAccessException]因爲循環到達安全文件夾「系統卷信息」,程序將停止。 我需要跳過這個異常,並在除受保護的文件和文件夾(如系統卷信息)之外的每個文件上進行代碼循環。

抱歉不便....

回答

0
Imports System.IO 

Public Class Form1 

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
    Dim strFileList(-1) As String 
    Call GetAllFiles("C:\", "*.*", strFileList) 

    ListBox1.ClearSelected() 
    For Each s As String In strFileList 
     ListBox1.Items.Add(s) 
    Next s 
    End Sub 

    Public Sub GetAllFiles(folder As String, searchPattern As String, ByRef fileList() As String) 
    'First add all files in the current folder 
    Dim strFiles(-1) As String 
    Try 
     strFiles = Directory.GetFiles(folder, searchPattern, SearchOption.TopDirectoryOnly) 
    Catch ex As Exception 
    End Try 
    If strFiles.GetUpperBound(0) >= 0 Then 
     Dim intStartIndex As Integer = fileList.GetUpperBound(0) + 1 
     ReDim Preserve fileList(fileList.GetUpperBound(0) + strFiles.GetUpperBound(0) + 1) 
     For i As Integer = 0 To strFiles.GetUpperBound(0) 
     fileList(intStartIndex + i) = strFiles(i) 
     Next i 
    End If 
    'Next go through all folders 
    Dim strFolders(-1) As String 
    Try 
     strFolders = Directory.GetDirectories(folder, "*.*", SearchOption.TopDirectoryOnly) 
    Catch ex As Exception 
    End Try 
    If strFolders.GetUpperBound(0) >= 0 Then 
     For Each strFolder As String In strFolders 
     Call GetAllFiles(strFolder, searchPattern, fileList) 
     Next strFolder 
    End If 
    End Sub 

End Class 
相關問題