C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: GetFilesで例外発生時も続行したい


(過去ログ 122 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■73194 / inTopicNo.1)  GetFilesで例外発生時も続行したい
  
□投稿者/ pod (16回)-(2014/08/27(Wed) 16:52:07)

分類:[C#] 

C#(VS Express 2013)でファイル一覧を取得しようとしています。
一覧はフォルダとサブフォルダを含むものにしたいので次のようにしました。

string[] files = System.IO.Directory.GetFiles(@"C:\Users\ユーザー名\Documents", "*", System.IO.SearchOption.AllDirectories);

しかし、次のような例外が発生してしまいます。
パス 'C:\Users\ユーザー名\Documents\My Music' へのアクセスが拒否されました。

実際に「C:\Users\ユーザー名\Documents」の中にはMy Musicというフォルダはありません。

検索すると属性を調べればシンボリックリンクやジャンクションであることがわかるので
それをスキップすれば良いという情報が見つかりましたが、
GetFilesの段階で例外が発生しているため属性を調べる前に中断されてしまいます。

取得不能なファイルは無視してそのまま続行するようにしたいのですがどのようにすればいいのでしょうか。
よろしくお願いします。
引用返信 編集キー/
■73195 / inTopicNo.2)  Re[1]: GetFilesで例外発生時も続行したい
□投稿者/ Hongliang (226回)-(2014/08/27(Wed) 16:55:43)
AllDirectoriesを使うのではなく、自分で再帰的に(あるいはStack<T>などをつかって)GetDirectoriesをTopDirectoryOnlyで呼び出し、見つかったディレクトリに対してGetFilesするようにします。
引用返信 編集キー/
■73220 / inTopicNo.3)  Re[2]: GetFilesで例外発生時も続行したい
□投稿者/ pod (17回)-(2014/08/29(Fri) 11:05:58)
No73195 (Hongliang さん) に返信
> AllDirectoriesを使うのではなく、自分で再帰的に(あるいはStack<T>などをつかって)GetDirectoriesをTopDirectoryOnlyで呼び出し、見つかったディレクトリに対してGetFilesするようにします。

やはりそれしかないのですね。
再帰処理で代替の関数を作ってファイルごとにtry/catchするようにしました。
ありがとうございます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -