首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取消隐藏所有隐藏的文件、文件夹、子文件夹和子文件,除非使用Visual拒绝访问路径

取消隐藏所有隐藏的文件、文件夹、子文件夹和子文件,除非使用Visual拒绝访问路径
EN

Stack Overflow用户
提问于 2014-01-26 01:17:41
回答 1查看 3.2K关注 0票数 1

我下面的代码可以取消隐藏所有隐藏的文件、文件夹、子文件夹和子文件。问题是,如果任何访问被拒绝的路径,它都会停止。如何使代码跳过访问拒绝路径并继续使用其他路径。

代码语言:javascript
复制
Dim MyDrive As String = "D:\"
Dim FileCounter As Integer = 0
Dim FolderCounter As Integer = 0
Dim DriveObj As New IO.DirectoryInfo(MyDrive)

Dim Files As IO.FileInfo() = DriveObj.GetFiles("*.*", IO.SearchOption.AllDirectories)
Dim Directories As IO.DirectoryInfo() = DriveObj.GetDirectories("*.*", IO.SearchOption.AllDirectories)

    Dim Filename As IO.FileSystemInfo
        For Each Filename In Files
            On Error Resume Next
            If (IO.File.GetAttributes(Filename.FullName) And IO.FileAttributes.Hidden) = IO.FileAttributes.Hidden Then
                ' Show the file.
                IO.File.SetAttributes(Filename.FullName, IO.FileAttributes.Normal)
                FileCounter = FileCounter + 1
            End If
        Next

        Dim DirectoryName As IO.DirectoryInfo
        For Each DirectoryName In Directories
            On Error Resume Next
            If (IO.File.GetAttributes(DirectoryName.FullName) And IO.FileAttributes.Hidden) = IO.FileAttributes.Hidden Then
                ' Show the folder.
                IO.File.SetAttributes(DirectoryName.FullName, IO.FileAttributes.Normal)
                FolderCounter = FolderCounter + 1
            End If
        Next
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-26 08:53:13

当我测试代码时,我意识到当访问被拒绝时,DriveObj.GetFiles(...)DriveObj.GetDirectories(...)停止了,而不是For循环。要解决这个问题,您必须使用递归文件和目录清单。

代码语言:javascript
复制
Private Function GetFilesRecursive(ByVal initial As String) As List(Of String)
    ' This list stores the results.
    Dim result As New List(Of String)

    ' This stack stores the directories to process.
    Dim stack As New Stack(Of String)

    ' Add the initial directory
    stack.Push(initial)

    ' Continue processing for each stacked directory
    Do While (stack.Count > 0)
        ' Get top directory string
        Dim dir As String = stack.Pop
        Try
            ' Add all immediate file paths
            result.AddRange(Directory.GetFiles(dir, "*.*"))

            ' Loop through all subdirectories and add them to the stack.
            Dim directoryName As String
            For Each directoryName In Directory.GetDirectories(dir)
                stack.Push(directoryName)
            Next

        Catch ex As Exception
        End Try
    Loop

    ' Return the list
    Return result
End Function

Private Function GetDirectoriesRecursive(ByVal initial As String) As List(Of String)
    ' This list stores the results.
    Dim result As New List(Of String)

    ' This stack stores the directories to process.
    Dim stack As New Stack(Of String)

    ' Add the initial directory
    stack.Push(initial)

    ' Continue processing for each stacked directory
    Do While (stack.Count > 0)
        ' Get top directory string
        Dim dir As String = stack.Pop
        Try
            ' Add all immediate file paths
            result.AddRange(Directory.GetDirectories(dir, "*.*"))

            ' Loop through all subdirectories and add them to the stack.
            Dim directoryName As String
            For Each directoryName In Directory.GetDirectories(dir)
                stack.Push(directoryName)
            Next

        Catch ex As Exception
        End Try
    Loop

    ' Return the list
    Return result
End Function

Private Sub Unhide()
    Dim MyDrive As String = "D:\"
    Dim FileCounter As Integer = 0
    Dim FolderCounter As Integer = 0

    Dim Files As List(Of String) = GetFilesRecursive(MyDrive)
    Dim Directories As List(Of String) = GetDirectoriesRecursive(MyDrive)

    For Each Filename In Files
        If (IO.File.GetAttributes(Filename) And IO.FileAttributes.Hidden) = IO.FileAttributes.Hidden Then
            'Show the file.
            IO.File.SetAttributes(Filename, IO.FileAttributes.Normal)
            FileCounter = FileCounter + 1
        End If
    Next

    For Each DirectoryName In Directories
        If (IO.File.GetAttributes(DirectoryName) And IO.FileAttributes.Hidden) = IO.FileAttributes.Hidden Then
            'Show the folder.
            IO.File.SetAttributes(DirectoryName, IO.FileAttributes.Normal)
            FolderCounter = FolderCounter + 1
        End If
    Next
End Sub
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21358435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档