Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
読み取れないディレクトリを除いてそれを取得する
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30196#CommentId82629
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2016/11/29 19:16:41
手前味噌ですが、実装例がこのあたりにあります。
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=9982
とはいえ古いコードですので、折角なので現行バージョンっぽい書き方にしてみました。
VB2012 以降が必要です。
Imports System.IO
Module Module1
Public Sub Main()
'これだと、権限エラー(UnauthorizedAccessException)等で止まってしまうことが…
'
'For Each s In Directory.EnumerateDirectories("D:\", "*", SearchOption.AllDirectories)
' Console.WriteLine(s)
'Next
'こちらなら、アクセス権の無いディレクトリを読み飛ばして列挙しつづけます
'
For Each s In SafeEnumerateDirectories("D:\", "*")
Console.WriteLine(s)
Next
End Sub
Public Iterator Function SafeEnumerateDirectories(ByVal parentDir As String, Optional ByVal seachPattern As String = "*") As IEnumerable(Of String)
Dim directories As IEnumerable(Of String) = Nothing
Try
directories = Directory.EnumerateDirectories(parentDir, seachPattern, SearchOption.TopDirectoryOnly)
Catch
'Debug.WriteLine(parentDir)
End Try
If directories Is Nothing Then
Return
Else
For Each subDir In directories
Yield subDir
For Each recursive In SafeEnumerateDirectories(subDir, seachPattern)
Yield recursive
Next
Next
End If
End Function
End Module
元のコードは List(Of ) なため、列挙までに時間がかかりましたが、
今回は Iterator にしていますので、見つかった物から即時返却されはじめます。
なお、シンボリックリンクの中も探索する仕様なので、
親子が繋がった無限階層なパスの中も、延々と探し続けますのでご注意を。
(といっても、無限階層であれば、パス長エラーで打ち切られるはずですが)