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 ループは実行されず、「他の」ディレクトリはありません (表示されていない他のコードがない限り)。

ルートから始まるディレクトリを再帰的に列挙したい場合は、独自の再帰コードを書くのが最善かもしれません。これにより、例外 (つまり、列挙できないディレクトリ) をスキップできます。

GetFileSystemEntriesパラメーターを指定したUinsgはSystem.IO.SearchOption.AllDirectories、アプリケーションによって作成されたディレクトリ構造をトラバースするのにより適しています。そうしないと、任意のディレクトリをトラバースするときに、アクセスの問題が発生する可能性が高くなります。また、ループを作成するディレクトリ構造にリンクがある場合、マイクロソフトは無限ループに陥ると言っています

独自のトラバーサル アルゴリズムを作成すると、これらの問題を回避できます。あるいは、周りを見回すと、すでにこれを行っているライブラリが見つかるかもしれません。

于 2013-11-10T01:50:50.920 に答える