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

System.IO.Directory.GetFiles(String, String, SearchOption)メソッドの無限ループ

環境/言語:[OS : Windows XP / 言語 : C# / .NET Framework : 3.5]
分類:[.NET]

皆さん、こんにちは!初めて投稿させていただきます。
いつもこちらには、大変お世話になっています。皆さんの知識と管理人さんのおかげで、初心者から半人前(?)になれました。
まだまだ皆さんのような一人前の技術者にはほど遠いですが・・・

【解決したい問題】
今回皆さんのお力をお借りしたいことなのですが、
System.IO.Directory.GetFiles(String, String, SearchOption)メソッド
で、第三引数に「SearchOption.AllDirectories」を指定した際の動きについてです。

MSDNでは
「検索範囲として AllDirectories を選択し、ループを作成するリンクがディレクトリ構造に含まれている場合は、検索操作が無限ループになります。」

と有りますが、いったいどのような状態だと無限ループになるのか、現象の再現方法がわかりません。

エクスプローラ上でフォルダやファイルを操作している限りありえない現象ならば問題ないのですが、いかんせん不安なままコードを使用するのは怖いので・・・

【解決するために何をしたか】

「ループを作成するリンクがディレクトリ構造に含まれている」場合を再現しようとして以下のような「ショートカット」を作成いたしました。

./フォルダA/フォルダB/フォルダC/フォルダAへのショートカット
(各フォルダに検索条件に引っかかるファイルを1ファイルずつ格納)

上記の構成ですと、各フォルダ内のファイル+「フォルダAへのショートカット」の.lnkファイルが取得でき、無限ループとはなりませんでした。

「無限ループ」はさすがに恐ろしいです・・・ぜひともご教授願います。
■No27288に返信(DHさんの記事)

MSDNより引用
> AllDirectories 検索操作に現在のディレクトリとすべてのサブディレクトリを> 含めます。このオプションは、検索範囲にマウントされたドライブやシンボリッ> ク リンクのようなリパース ポイントを含めます。 。
ショートカットではなくシンボリックリンクです。
■No27289に返信(shuさんの記事)
> ■No27288に返信(DHさんの記事)
>
> MSDNより引用
>>AllDirectories 検索操作に現在のディレクトリとすべてのサブディレクトリを> 含めます。このオプションは、検索範囲にマウントされたドライブやシンボリッ> ク リンクのようなリパース ポイントを含めます。 。
> ショートカットではなくシンボリックリンクです。

早速のお返事ありがとうございます。
なるほど「シンボリックリンク」なんですね!LINUXではなじみがありましたが、windowsでも存在したとは・・・勉強不足でした。
XPのシンボリックリンクもどうやらコマンドかToolでしか作れないとのことなので、一安心です。(一応防止策は考慮しとかなければですが)
個人的に興味があるので、業務外で無限ループやってみようと思います。

shuさん、改めてありがとうございました。
解決済み!

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