2012-04-04 29 views
0

的Visual Studio 2008(vb.net) 我做了簡單的anivirus但是當我做全掃描這段代碼:如何正確枚舉所選路徑中的文件?

FolderBrowserDialog1.SelectedPath = ("C:\") 
    'first scan:************************************ 
    Try 

     For Each strDir As String In 
     System.IO.Directory.GetDirectories(FolderBrowserDialog1.SelectedPath) 

      For Each strFile As String In System.IO.Directory.GetFiles(strDir) 

       ListBox1.Items.Add(strFile) 

      Next 
     Next 

     'Start the timer: 

    Catch ex As Exception 
    End Try 

    Timer1.Start()` 

只需掃描前6個文件... 我想從Windows文件夾權限問題(Windows - Program Files ...等) 那麼如何解決它?

回答

1

你可以嘗試以下方法:

For Each strFile As String In System.IO.Directory.GetFiles(strDir, "*", IO.SearchOption.AllDirectories) 

編輯:

你可以嘗試在此線程找到的最後一個解決辦法: http://www.vbforums.com/showthread.php?t=624969

我嘗試這樣做我自己,這是超慢,但工作得很好。

Public Class Form1 

    Private Sub foo(ByVal aDir As String) 
     Try 

      Dim di As New IO.DirectoryInfo(aDir) 
      Dim aryFiles() As IO.FileInfo = di.GetFiles("*.*") 
      Dim aryDirs() As IO.DirectoryInfo = di.GetDirectories() 

      For Each fi As IO.FileInfo In aryFiles 
       rslts.Add(fi.FullName) 
      Next 

      For Each d As IO.DirectoryInfo In aryDirs 
       foo(d.FullName) 
      Next 

     Catch ex As Exception 
      'Stop 'the catch should be more specific 
     End Try 

    End Sub 

    Dim rslts As List(Of String) 

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
     rslts = New List(Of String) 
     foo("C:\") 
     ListBox1.Items.Clear() 
     ListBox1.Items.AddRange(rslts.ToArray) 
    End Sub 
End Class 

看起來您的解決方案基本上是通過它可以找到的第一個文件夾循環並停在那裏。該解決方案有點不同,因爲它會基於起始位置遞歸遍歷所有文件和文件夾。

+0

添加新行或替換這一個:System.IO.Directory.GetDirectories(FolderBrowserDialog1.SelectedPath) – 2012-04-04 12:21:45

+0

仍然沒有修復,沒有掃描這個文件夾(Windows,Program Files等) – 2012-04-04 12:27:05

+0

Thnx分配它的工作100%現在但仍然緩慢,因爲你說 – 2012-04-04 17:16:16

2

Console.WriteLine(ex)放入您的catch塊,以便您可以看到引發的任何異常。那麼你可能會看到你的問題。最有可能的權限。

+0

仍然沒有工作: 抓住EX作爲例外 Console.WriteLine(前) 結束Try – 2012-04-04 12:40:59

+0

'Console.WriteLine'可能不會做,特別是如果它不是一個控制檯應用程序的正確的事情,但你需要做的事看看有什麼例外,如果有的話,你打。即使註釋掉'Try ... Catch'也會有助於調試,但是您絕對不應該只是吞下一個異常。 – 2012-04-04 22:24:14