2011-12-30 12 views
1

こんにちはすべて私は指定されたディレクトリ拡張子を持つすべてのファイルのすべてのサブディレクトリを検索しようとしています。しかし、ディレクトリにアクセスできない場合は、inbuiltコマンドはエラーとなるので役に立たなくなります。だからここに私は現時点で持っているものです。ファイル拡張子で検索VB.NET

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を:オブジェクト参照オブジェクトのインスタンスに設定されていません。」を取得私はファイルリストの文字列配列の内部に格納されたデータにアクセスしようとします。

どのようなアイデアが間違っているのですか?

+0

fileListはインスタンス化されません。 –

答えて

2

Dim filelist() As Stringアレイをインスタンス化していません。

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 
+0

私は 'Dim File()をFileInfo = di.GetFiles(searchPattern)'として試しましたが、System.IO.FileInfoの型1次元配列の値をSystem.IO.FileInfoに変換することはできません – crackruckles

+0

okあなたのやり方は変わりますが、SearchOption.AllDirectoriesに変更すると、アクセス権がないフォルダにヒットすると問題が発生します。私はそれがアクセスできないフォルダを無視できるようにする必要があります。どんなアイデアが私はこの小さなアプリを終了するために必要な最後のものですか? – crackruckles

+0

これで助けてくれて本当にありがとう、あなたは人生の節約になります。 – crackruckles

0

使用S配列の文字列

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

デモを返しdi.GetFiles(searchPattern)

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

使用静的メソッドDirectory.GetFilesをお試しくださいystem.IO.Directory.EnumerateFilesメソッドを呼び出し、SearchOption.AllDirectoriesを渡して、特定の検索パターンを使用してツリーを走査します。次に例を示します。

foreach (var e in Directory.EnumerateFiles("C:\\windows", "*.dll", SearchOption.AllDirectories)) 
{ 
    Console.WriteLine(e); 
} 
関連する問題