2012-09-19 2 views
0

가능한 중복 :
Ignore folders/files when Directory.GetFiles() is denied access루프()

나는 어떤 특정 폴더에있는 파일에 루프이 예제를 가지고있다.

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