.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.Directory
たPathTooLongException
! DirectoryInfo
(実際のコードはもっと複雑なので、私はそれを使用できません)。
スタック トレースを見ると、内部パス (file.FullPath
デバッグから保護されていることがわかります) を使用しているようで、ディレクトリを完全な (特大の) パスから引き裂こうとしています。問題のほとんどは、System.IO.Path.NormalizePath
.Net 4.0 でいくつかの変更が加えられたと聞いています。以前のバージョンのフレームワークは試していません。
私の質問:
- この例外から完全なパスを取得するにはどうすればよいですか。有用な情報なしで渡されたようです。
- ファイル名を切り取るために、フレームワークがパス内の文字を制限する必要があるのはなぜですか?
助けてくれてありがとう、
アンディ