2011-12-30 5 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 배열을 인스턴스화하지 않았습니다. 배열 문자열을 반환 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 
+0

나는 Dim File()을 FileInfo = di.GetFiles (searchPattern)로 시도했지만 형식 1 차원 배열의 System.IO.FileInfo로 변환 할 수 없습니다 System.IO.FileInfo – crackruckles

+0

괜찮습니다. 당신의 방법은 작동하지만 내가 그것을 SearchOption.AllDirectories로 바꿀 때 나는 당신이 접근 할 수없는 폴더에 도달 할 때 문제를 겪는다. 폴더를 무시할 수 있어야 액세스 및 이동이 불가능합니다. 어떤 아이디어가이 작은 응용 프로그램을 끝내기 위해 내가해야 할 마지막 일입니까? – crackruckles

+0

도움을 주셔서 대단히 감사드립니다. 당신은 생명의 은인입니다. – crackruckles

0

사용 S ystem.IO.Directory.EnumerateFiles 메서드를 호출하고 SearchOption.AllDirectories를 전달하여 특정 검색 패턴을 사용하여 트리를 탐색합니다. 다음은 예제입니다.

foreach (var e in Directory.EnumerateFiles("C:\\windows", "*.dll", SearchOption.AllDirectories)) 
{ 
    Console.WriteLine(e); 
} 
관련 문제