3

現時点では正しくコンパイルされますが、実行して開いてボタンをクリックすると、C:\ から CheckedListBox1 にすべてのファイルが追加されますが、停止します...

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
4

1 に答える 1

6

機能を使用していDirectory.GetFilesます。MSDNのドキュメントによると、これはファイルのみを返します。列挙のチェックFileAttributes.Directoryは常に false を返します。

ネット上には、c# と vb.net の両方で再帰的なファイルとディレクトリのリストを表示する例がたくさんあります。

免責事項: このコードは、単にコードにリンクするのではなく、Dot Net Perls の Web サイト(こちら) からコピーしました (リンクが切れた場合に備えて)。

ディレクトリを再帰するプログラム: 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
于 2013-04-27T05:56:50.053 に答える