我在 .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 中经历了一些变化。我没有尝试过以前版本的框架。
我的问题:
- 我怎样才能从这个异常中得到完整的路径;它似乎在没有任何有用信息的情况下通过了。
- 为什么框架需要限制路径中的字符来截断文件名?
在此先感谢您的帮助,
安迪