DOBON.NETプログラミング道掲示板

■35563 / 親記事)  GetDirectoriesでルートを指定するとエラーになる
  
□投稿者/ DISP 一般人(1回)-(2023/12/17(Sun) 13:40:39)
  • アイコン環境/言語:[Microsoft Visual Studio Community 2019 / VB.NET] 
    分類:[.NET] 

    Dim sub_Folders As String() = System.IO.Directory.GetDirectories(Me.OutputTextBox.Text, "*", System.IO.SearchOption.AllDirectories)
    でG:\ドライブ直下のフォルダ一覧を取得しようとしたのですが、
    ------------------------------------------------
    System.UnauthorizedAccessException
    HResult=0x80070005
    Message=パス 'G:\System Volume Information' へのアクセスが拒否されました。
    Source=<例外のソースを評価できません>
    スタック トレース:
    <例外のスタック トレースを評価できません>
    ------------------------------------------------
    というエラーが出てしまいます。
    Me.OutputTextBox.Textには「G:\」という文字列が入っています。
    試しに
    Dim sub_Folders As String() = System.IO.Directory.GetDirectories("D:\\", "*", System.IO.SearchOption.AllDirectories)
    と変えてみたら通ったので「G:\\」にしてみると同じエラーになってしまいます。

    GドライブはUSB接続のSSDドライブ、Dドライブは内蔵HDDです。両方ともNTFSフォーマットです。
    外部ドライブのときは何か指定とか必要なのでしょうか。

マルチポストを報告
違反を報告
引用返信 削除キー/
■35565 / ResNo.1)  Re[1]: GetDirectoriesでルートを指定するとエラーになる
□投稿者/ Azulean 大御所(541回)-(2023/12/17(Sun) 20:39:55)
  • アイコンNo35563に返信(DISPさんの記事)
    > Dim sub_Folders As String() = System.IO.Directory.GetDirectories(Me.OutputTextBox.Text, "*", System.IO.SearchOption.AllDirectories)
    > でG:\ドライブ直下のフォルダ一覧を取得しようとしたのですが、
    > ------------------------------------------------
    > System.UnauthorizedAccessException
    > HResult=0x80070005
    > Message=パス 'G:\System Volume Information' へのアクセスが拒否されました。
    (略)
    > というエラーが出てしまいます。

    そういうものです。
    ドライブのルートには、システム用に隠されたフォルダーが存在しています。
    このフォルダーを含めて「すべてサブフォルダーを取得」と実行すると、アクセス権がないのでエラーになります。

    > GドライブはUSB接続のSSDドライブ、Dドライブは内蔵HDDです。両方ともNTFSフォーマットです。
    > 外部ドライブのときは何か指定とか必要なのでしょうか。

    G:\ だろうと、D:\ だろうと、C:\ だろうと、同様にエラーが起きるはずです。
    このため、ドライブルートからまとめて AllDirectories を実行するのは避け、TopDirectoryOnly を用いて、例外をキャッチしながら列挙することを考えてください。
違反を報告
引用返信 削除キー/
■35568 / ResNo.2)  Re[2]: GetDirectoriesでルートを指定するとエラーになる
□投稿者/ DISP 一般人(3回)-(2023/12/18(Mon) 06:38:09)
  • アイコン2023/12/18(Mon) 06:39:14 編集(投稿者)

    No35565に返信(Azuleanさんの記事)
    うーん、そういうものなのですが。
    ありがとうございます。
解決み!
違反を報告
引用返信 削除キー/
■35570 / ResNo.3)  Re[3]: GetDirectoriesでルートを指定するとエラーになる
□投稿者/ Hongliang 大御所(650回)-(2023/12/18(Mon) 16:27:24)
  • アイコン.NET 5以降であれば、EnumerationOptionsというクラスが用意されていて、これにIgnoreInaccessibleプロパティがあるので、これをGetDirectoriesに渡すことでアクセスできないフォルダを無視することもできるようになっているのですが。
解決み!
違反を報告
引用返信 削除キー/



スレッド内ページ移動 / << 0 >>

このスレッドに書きこむ

Mode/  Pass/


- Child Tree -