2013-04-27 39 views
3

在它編譯正確的時刻,但是當我運行它打開,然後單擊按鈕,它由C添加的所有文件:\到CheckedListBox1但隨後停止......無法列出子direcories

Imports System.IO 

Public Class Form1 
    Public Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles GetProfiles_Button.Click 
     Dim rootObject As String() = Directory.GetFiles("C:\") 
     For Each subObject As String In rootObject 
      searchObject(subObject) 
     Next 
    End Sub 

    Public Shared Sub searchObject(targetObject As String) 
     If File.GetAttributes(targetObject) = FileAttributes.Directory Then 
      Form1.CheckedListBox2.Items.Add(targetObject) 
      Dim subRoot As String() = Directory.GetFiles(targetObject) 
      For Each subRootObject As String In subRoot 
       searchObject(subRootObject) 
      Next 
     Else 
      Form1.CheckedListBox1.Items.Add(targetObject) 
     End If 
    End Sub 

End Class 
+1

我編輯了自己的冠軍。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2013-04-27 06:11:43

回答

6

你正在使用Directory.GetFiles功能。根據documentation on MSDN,這隻會返回文件。您檢查FileAttributes.Directory枚舉將始終返回false。

在網上有很多例子顯示在c#和vb.net中的遞歸文件和目錄列表。

免責聲明:我已從Dot Net Perls網站here複製此代碼,而不是僅鏈接到代碼(萬一鏈接死亡)。

程序,遞歸目錄:VB.NET

Imports System.IO 

''' <summary> 
''' This class contains directory helper method(s). 
''' </summary> 
Public Class FileHelper 

    ''' <summary> 
    ''' This method starts at the specified directory, and traverses all subdirectories. 
    ''' It returns a List of those directories. 
    ''' </summary> 
    Public Shared Function GetFilesRecursive(ByVal initial As String) As List(Of String) 
    ' This list stores the results. 
    Dim result As New List(Of String) 

    ' This stack stores the directories to process. 
    Dim stack As New Stack(Of String) 

    ' Add the initial directory 
    stack.Push(initial) 

    ' Continue processing for each stacked directory 
    Do While (stack.Count > 0) 
     ' Get top directory string 
     Dim dir As String = stack.Pop 
     Try 
     ' Add all immediate file paths 
     result.AddRange(Directory.GetFiles(dir, "*.*")) 

     ' Loop through all subdirectories and add them to the stack. 
     Dim directoryName As String 
     For Each directoryName In Directory.GetDirectories(dir) 
      stack.Push(directoryName) 
     Next 

     Catch ex As Exception 
     End Try 
    Loop 

    ' Return the list 
    Return result 
    End Function 

End Class 

Module Module1 

    ''' <summary> 
    ''' Entry point that shows usage of recursive directory function. 
    ''' </summary> 
    Sub Main() 
    ' Get recursive List of all files starting in this directory. 
    Dim list As List(Of String) = FileHelper.GetFilesRecursive("C:\Users\Sam\Documents\Perls") 

    ' Loop through and display each path. 
    For Each path In list 
     Console.WriteLine(path) 
    Next 

    ' Write total number of paths found. 
    Console.WriteLine(list.Count) 
    End Sub 

End Module