0

我在 Visual Basic 中使用 GetFileSystemEntries() 来获取驱动器的完整结构,我使用了在 MSDN 中发现的异常来处理错误,但我不知道如何传递给我错误的目录并保存我阵列中的其他人。

这是我的代码:

Dim array()

    Try
        array = System.IO.Directory.GetFileSystemEntries("C:\", "*", System.IO.SearchOption.AllDirectories)

        For Each x As System.String In array
            list_Drives.Items.Add(x)
        Next
    Catch exp As UnauthorizedAccessException
        System.Console.WriteLine("I don't have permission here")

    Catch exp As ArgumentNullException
        System.Console.WriteLine("Path is a null reference.")
    Catch exp As System.Security.SecurityException
        System.Console.WriteLine("The caller does not have the " + _
                                "required permission.")
    Catch exp As ArgumentException
        System.Console.WriteLine("Path is an empty string, " + _
                                "contains only white spaces, " + _
                                "or contains invalid characters.")
    Catch exp As System.IO.DirectoryNotFoundException
        System.Console.WriteLine("The path encapsulated in the " + _
                                "Directory object does not exist.")
    End Try

谢谢

4

1 回答 1

0

异常是由 引发的System.IO.Directory.GetFileSystemEntries,所以当这种情况发生时,for-loop 不会执行并且没有“其他”目录(除非您没有显示其他一些代码)。

如果您想从根目录开始递归枚举目录,那么您最好编写自己的递归代码。这将允许您跳过异常(即,您不允许枚举的目录)。

GetFileSystemEntries带参数的UinsgSystem.IO.SearchOption.AllDirectories更适合遍历应用程序创建的目录结构。否则,在遍历任意目录时,很可能会遇到访问问题。此外,如果目录结构中存在创建循环的链接,Microsoft 表示您最终会陷入无限循环

如果您创建自己的遍历算法,则可以避免这些问题。或者,如果您环顾四周,您可能会发现一个已经为您执行此操作的库。

于 2013-11-10T01:50:50.920 回答