0

私が達成しようとしているのは、ファイルを解析して、特定のドライブまたはフォルダー構造内のすべてのファイルのリストを取得することです。また、保護されたファイルの場合に発生する未承認の例外を処理しようとしています。コードはほとんどの場合正常に動作しますドライブとフォルダーですが、Windows ドライブ (C:) のような場合には、System.StackOverflow 例外がスローされます。何が問題なのですか?もっと良い方法はありますか?

static void WalkDirectoryTree(System.IO.DirectoryInfo root)
    {
        System.IO.FileInfo[] files = null;
        System.IO.DirectoryInfo[] subDirs = null;

        // First, process all the files directly under this folder
        try
        {
            files = root.GetFiles("*.*");
        }
        // This is thrown if even one of the files requires permissions greater
        // than the application provides.
        catch (UnauthorizedAccessException e)
        {
           //eat
        }

        catch (System.IO.DirectoryNotFoundException e)
        {
           //eat
        }

        if (files != null)
        {
            foreach (System.IO.FileInfo fi in files)
            {

                Console.WriteLine(fi.FullName);
            }

            // Now find all the subdirectories under this directory.
            subDirs = root.GetDirectories();

            foreach (System.IO.DirectoryInfo dirInfo in subDirs)
            {
                // Resursive call for each subdirectory.
                WalkDirectoryTree(dirInfo);
            }
        }            
    }
}
4

1 に答える 1

3

何が起こっているかを確認するために、デバッガーでステップスルーしようとしましたか?

再帰のように聞こえますが、より高いレベルを指しているNTFS ジャンクション ポイントがどこかにある可能性があります。

MSDN による StackOverflowExceptionの定義は次のとおりです。

ネストされたメソッド呼び出しが多すぎるために実行スタックがオーバーフローした場合にスローされる例外。このクラスは継承できません。

だからこそ、私はそれを推測しています。システムのディレクトリ構造が、実行スタックで許可されている呼び出しの数よりも深いことはほとんどありません。

于 2012-06-23T05:06:05.843 に答える