当我递归浏览一些文件夹和文件时,我遇到了这个错误:
指定的路径、文件名或两者都太长。完全限定文件名必须少于 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 相同的界面。
最佳答案
这里有关于前面提到的 Delimon 库的更多信息。它是 Microsoft TechNet 上一个基于 .NET Framework 4 的库,用于克服长文件名问题:
Delimon.Win32.IO Library (V4.0) 强>。
它有自己版本的 System.IO 关键方法。例如,您将替换:
System.IO.Directory.GetFiles
与
Delimon.Win32.IO.Directory.GetFiles
这将使您能够处理长文件和文件夹。
来自网站:
Delimon.Win32.IO replaces basic file functions of System.IO and supports File & Folder names up to up to 32,767 Characters.
This Library is written on .NET Framework 4.0 and can be used either on x86 & x64 systems. The File & Folder limitations of the standard System.IO namespace can work with files that have 260 characters in a filename and 240 characters in a folder name (MAX_PATH is usually configured as 260 characters). Typically you run into the System.IO.PathTooLongException Error with the Standard .NET Library.
关于C# 如何解决使用 DirectoryInfo 时的限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9584081/