Vb.net 如何正确枚举选定路径中的文件?

Vb.net 如何正确枚举选定路径中的文件?,vb.net,file-io,iteration,Vb.net,File Io,Iteration,Visual Studio 2008(vb.net) 我制作了简单的anivirus,但当我使用此代码进行完全扫描时: FolderBrowserDialog1.SelectedPath = ("C:\") 'first scan:************************************ Try For Each strDir As String In System.IO.Directory.GetDirectories(Fold

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-程序文件…等)
那么如何修复它呢?

您可以尝试以下方法:

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

您可以尝试在此线程中找到的最后一个解决方案:

我自己试过,速度非常慢,但效果很好

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

看起来您的解决方案基本上是在它能找到的第一个文件夹中循环,然后停在那里。此解决方案有点不同,因为它将根据开始位置递归遍历所有文件和文件夹。

您可以尝试以下操作:

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

您可以尝试在此线程中找到的最后一个解决方案:

我自己试过,速度非常慢,但效果很好

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

看起来您的解决方案基本上是在它能找到的第一个文件夹中循环,然后停在那里。此解决方案有点不同,因为它将根据开始位置递归地遍历所有文件和文件夹。

在catch块中放置一个
控制台。WriteLine(ex)
,以便可以看到抛出的任何异常。那时你可能会发现你的问题。最可能的权限。

在catch块中放置一个
控制台。WriteLine(ex)
,以便查看抛出的任何异常。那时你可能会发现你的问题。最有可能的权限。

添加新行或替换此行:System.IO.Directory.GetDirectory(FolderBrowserDialog1.SelectedPath)仍然未修复,未扫描此文件夹(Windows、程序文件等)。您可能可以让它在单独的线程上逐步处理此问题,以使UI更具响应性,但我已经多年没有使用VB了,所以我不知道该怎么做。添加新行或替换这一行:System.IO.Directory.GetDirectory(FolderBrowserDialog1.SelectedPath)仍然没有修复,没有扫描这些文件夹(Windows、程序文件等)你可能会让它在一个单独的线程上逐步处理这个问题,以使UI更具响应性,但我已经多年没有使用VB了,所以我不知道如何处理它。仍然不工作:Catch ex作为异常控制台。WriteLine(ex)End Try
控制台。WriteLine
可能不是正确的做法,特别是如果它不是一个控制台应用程序,但是您需要做一些事情来查看您遇到了哪些异常(如果有)。即使注释掉
也可以尝试。。。Catch
有助于调试,但您永远不应该只是吞下异常。仍然不工作:Catch ex作为异常控制台。WriteLine(ex)End Try
控制台。WriteLine
可能不是正确的做法,特别是如果它不是控制台应用程序,但是你需要做点什么来看看你遇到了什么异常,如果有的话。即使注释掉
也可以尝试。。。Catch
将有助于调试,但您永远不应该只接受异常。