【发布时间】:2012-03-06 17:51:16
【问题描述】:
我在 .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 中经历了一些变化。我没有尝试过以前版本的框架。
我的问题:
- 如何从这个异常中获取完整路径;它似乎在没有任何有用信息的情况下通过了。
- 为什么框架需要限制路径中的字符来截断文件名?
提前感谢您的帮助,
安迪
【问题讨论】:
标签: c# .net windows path pathtoolongexception