2012-04-04 31 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