gpt4 book ai didi

C# 如何解决使用 DirectoryInfo 时的限制?

转载 作者:可可西里 更新时间:2023-11-01 09:07:38 32 4
gpt4 key购买 nike

当我递归浏览一些文件夹和文件时,我遇到了这个错误:

指定的路径、文件名或两者都太长。完全限定文件名必须少于 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.I​O 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com