1

こんにちは、指定されたファイル拡張子を持つすべてのファイルについて、指定されたディレクトリとすべてのサブディレクトリを検索しようとしています。ただし、組み込みコマンドは、ディレクトリにアクセスできないとエラーが発生して停止するため、役に立ちません。だからここに私が現時点で持っているものがあります:

 Private Function dirSearch(ByVal path As String, Optional ByVal searchpattern As String = ".exe") As String()
    Dim di As New DirectoryInfo(path)
    Dim fi As FileInfo
    Dim filelist() As String
    Dim i As Integer = 0
    For Each fi In di.GetFiles
        If System.IO.Path.GetExtension(fi.FullName).ToLower = searchpattern Then
            filelist(i) = fi.FullName
            i += 1
        End If
    Next
    Return filelist
 End Function

ただし、「System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません」というメッセージが表示されます。ファイルリスト文字列配列内に格納されているデータにアクセスしようとすると。

私が間違っていることについて何か考えはありますか?

4

2 に答える 2

3

Dim filelist() As String配列をインスタンス化しませんでした。試すdi.GetFiles(searchPattern)

Dim files() as FileInfo = di.GetFiles(searchPattern)

配列文字列を返す静的メソッドDirectory.GetFilesを使用します

Dim files =  Directory.GetFiles(Path,searchPattern,searchOption)

デモ:

 Dim files() As String
 files = Directory.GetFiles(path, "*.exe", SearchOption.TopDirectoryOnly)
 For Each FileName As String In files
     Console.WriteLine(FileName)
 Next

再帰的なディレクトリトラバーサル:

   Sub Main()
        Dim path = "c:\jam"
        Dim fileList As New List(Of String)

        GetAllAccessibleFiles(path, fileList)

        'Convert List<T> to string array if you want
        Dim files As String() = fileList.ToArray

        For Each s As String In fileList
            Console.WriteLine(s)
        Next
    End Sub

    Sub GetAllAccessibleFiles(path As String, filelist As List(Of String))
        For Each file As String In Directory.GetFiles(path, "*.*")
            filelist.Add(file)
        Next
        For Each dir As String In Directory.GetDirectories(path)
            Try
                GetAllAccessibleFiles(dir, filelist)
            Catch ex As Exception

            End Try
        Next
    End Sub
于 2011-12-30T05:50:19.793 に答える
1

System.IO.Directory.EnumerateFilesメソッドを使用し、SearchOption.AllDirectoriesを渡して、特定の検索パターンを使用してツリーをトラバースします。次に例を示します。

foreach (var e in Directory.EnumerateFiles("C:\\windows", "*.dll", SearchOption.AllDirectories))
{
    Console.WriteLine(e);
}
于 2011-12-30T05:50:42.140 に答える