【发布时间】:2012-03-23 22:53:41
【问题描述】:
当我递归浏览一些文件夹和文件时,我遇到了这个错误:
指定的路径、文件名或两者都太长。完全限定的文件名必须少于 260 个字符,并且目录名必须少于 248 个字符。
这是我的功能
private void ProcessDirectory(DirectoryInfo di)
{
try
{
DirectoryInfo[] diArr = di.GetDirectories();
foreach (DirectoryInfo directoryInfo in diArr)
{
if (StopCheck)
return;
ProcessDirectory(directoryInfo);
}
ProcessFile(di);
}
catch (Exception e)
{
listBoxError.Items.Add(e.Message);
}
TextBoxCurrentFolder.Text = di.ToString();
}
我不能缩短目录名称,因为我也不允许这样做...我该如何解决这个问题?
添加: 这是另一个函数:
private void ProcessFile(DirectoryInfo di)
{
try
{
FileInfo[] fileInfo = di.GetFiles();
if (fileInfo.LongLength != 0)
{
foreach (FileInfo info in fileInfo)
{
Size += info.Length;
CountFile++;
}
}
}
catch (Exception e)
{
listBoxError.Items.Add(e.Message);
}
}
编辑 在他使用 Zeta Long Paths 的地方找到了这个: How can I use FileInfo class, avoiding PathTooLongException?
已经实现了,现在我要让程序运行一夜,看看它是否有效。
编辑 昨天使用了 ZetaLongPath,效果很好!它甚至会遍历需要权限访问的文件夹。
编辑 而不是zetalongPath,我使用了我认为更好的Delimon.Win32.IO.dll。和Win32的界面一样。
【问题讨论】:
-
我猜你必须回到普通的 Windows API (FindFirst*/FindNext*)
-
那么错误是从
ProcessFile()内部发生的,如果我们能看到,也许可以更改代码? -
你知道在开始处理文件之前你是第一个到最深的子文件夹吗?!如果您想从根文件夹开始,您应该将
ProcessFile(di);移动到方法的开头。 -
Musefan:不,问题不会在那里发生。当然 :) 添加了功能
-
蒂姆:是的,我知道,有人告诉我应该从最深处开始。
标签: c# .net directoryinfo