3

.Net 4.0 で DirectoryInfo と FileInfo を使用して、ディレクトリ ツリー内のファイルを列挙していますが、PathTooLongException が発生しています。簡易版は以下

public static class Test
{
    public static void Search(DirectoryInfo base)
    {
        foreach(var file in base.GetFiles())
        {
            try
            {
                Console.WriteLine(file.FullName);
            } catch(PathTooLongException ex)
            {
                // What path was this?
            }
        }
        foreach(var dir in base.GetDirectories())
        {
            Search(dir);
        }
    }
}

エラーがスローされたときに、問題の原因となったファイル パスを知りたいです。FullName明らかに、それがエラーになったので、私は求めることができません。から名前を取得できますfile.Nameが、パスの残りの部分を取得できない場合は、ファイルが見つかったにもかかわらず、 が正常に機能しましfile.DirectoryPathTooLongException! DirectoryInfo(実際のコードはもっと複雑なので、私はそれを使用できません)。

スタック トレースを見ると、内部パス (file.FullPathデバッグから保護されていることがわかります) を使用しているようで、ディレクトリを完全な (特大の) パスから引き裂こうとしています。問題のほとんどは、System.IO.Path.NormalizePath.Net 4.0 でいくつかの変更が加えられたと聞いています。以前のバージョンのフレームワークは試していません。

私の質問:

  1. この例外から完全なパスを取得するにはどうすればよいですか。有用な情報なしで渡されたようです。
  2. ファイル名を切り取るために、フレームワークがパス内の文字を制限する必要があるのはなぜですか?

助けてくれてありがとう、
アンディ

4

1 に答える 1