2013-08-02 41 views
0

我正在製作一個程序來搜索驅動器中的可執行文件。用vb.net搜索驅動器

Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim di As New DirectoryInfo("C:\") 
    Dim files() As FileInfo 
    Dim a As Integer 
    Do While a = 0 
     Try 
      files = di.GetFiles("FileName.exe", SearchOption.AllDirectories) 
     Catch ex As UnauthorizedAccessException 
     End Try 
     If Not files Is Nothing Then 
      a = 1 
     End If 
    Loop 
    txt_Location.Text = files(0).FullName 
End Sub 

只要遇到第一個UnauthorizedAccessException,就會陷入無限循環。如何跳過產生異常的文件?

編輯: 這是我現在有:

Public Sub DirSearch(ByVal sDir As String) 
    Dim dir As String 
    Try 
     For Each dir In Directory.GetDirectories(sDir) 
      For Each file In Directory.GetFiles(dir, "Filename.exe") 
       ComboBox1.Items.Add(file) 
      Next 
      DirSearch(dir) 
     Next 
    Catch ex As Exception 
     Debug.WriteLine(ex.Message) 
    End Try 
End Sub 

Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click 
DirSearch("C:\") 
End Sub 
+0

[通過硬盤驅動器上的所有目錄進行循環]可能的重複(http://stackoverflow.com/questions/3864530/looping-through-all-directorys-on-the-hard-drive) –

回答

3

你需要遞歸這裏它處理的每個文件夾。

編輯:根據要求由OP,一個小例子:

Public Sub DirSearch(ByVal sDir As String) 
    Try 
     For Each dir as String In Directory.GetDirectories(sDir) 
      For Each file In Directory.GetFiles(dir, "yourfilename.exe") 
       lstFilesFound.Items.Add(file) 
      Next 
      DirSearch(dir) 
     Next 
    Catch ex As Exception 
     Debug.WriteLine(ex.Message) 
    End Try 
End Sub 

在下面的答案也看看:


另外請注意,如果你有足夠的訪問權限,可以簡化您的代碼如下:

Dim di as New DirectoryInfo() 
Dim files = di.GetFiles("iexplore.exe", SearchOption.AllDirectories) 'already returns all files at once 

,最後但並非最不重要的:具有

避免無限循環。就像在你的例子中一樣,只是因爲某些情況並不像你期望的那樣,它們可能會導致代碼被破壞。想象一下你的代碼已經運行在你的PC上,並且你將這個軟件部署到了一個客戶可怕的場景中。 ;-)

+0

可能你給我一個具體的例子,我的代碼? – Spartin503

+0

@ Spartin503完成。 –

+0

sDir,dir和d應該是什麼變量? – Spartin503