繁体   English   中英

避开系统卷信息文件夹

[英]Avoid system Volume information folder

我正在使用以下代码来获取目录信息。 如果我搜索顶级目录,它会很好地工作。 但是,当我搜索所有目录时,它会到达系统级信息并引发错误。 有什么方法可以避免搜索系统级信息文件夹? 谢谢

Imports System.IO
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim di As New DirectoryInfo("d:\"), i As Integer
        Dim aryFiles() As FileInfo = di.GetFiles("*.doc", SearchOption.TopDirectoryOnly)
        For i = LBound(aryFiles) To UBound(aryFiles)
            MsgBox(aryFiles(i).FullName)
        Next i
    End Sub
End Class

这段代码可以为您解决问题。

Imports System.IO

Module Module1

    Sub Main()
        Dim folders = New DirectoryInfo("D:\").GetDirectories
        Dim files = New List(Of FileInfo)

        For Each folder In From d In folders Where d.Name <> "System Volume Information"
            files.AddRange(folder.GetFiles("*.doc", SearchOption.TopDirectoryOnly))
        Next

        For Each File In files
            MsgBox(File.FullName)
        Next
    End Sub

End Module

我假设您的项目是.NET 3.5或更高版本。 如果假设错误,请通知我。


编辑
由于您的要求,我一起破解了代码以自动跳过无法访问的文件夹。 我没有对代码进行广泛的测试,所以我不能保证它不会有错误。

Imports System.IO

Module Module1

    Sub Main()
        Dim folders = GetAllSubFolders("D:\Alex\Music")
        Dim files = New List(Of FileInfo)

        For Each folder In folders
            files.AddRange(folder.GetFiles("*.doc", SearchOption.TopDirectoryOnly))
        Next

        For Each File In files
            Console.WriteLine(File.FullName)
        Next

        Console.ReadLine()
    End Sub

    Function GetAllSubFolders(ByVal path As String) As IEnumerable(Of DirectoryInfo)
        Dim subFolders As New List(Of DirectoryInfo)

        Try
            subFolders.AddRange(New DirectoryInfo(path).GetDirectories())
        Catch ex As Exception
            'error handling code goes here'
        End Try

        Dim innerSubFolders As New List(Of DirectoryInfo)
        For Each folder In subFolders
            innerSubFolders.AddRange(GetAllSubFolders(folder.FullName))
        Next

        'add the inner sub folders'
        subFolders.AddRange(innerSubFolders)

        'return the directories'
        Return subFolders
    End Function

End Module

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM