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

标签 c# .net directoryinfo

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

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

相关文章:

c# - SharePoint 无法在 Windows 2008 上加载 C++ DLL

c# - Autofac - 内存泄漏

c# - 如何在 Visual Studio 控制台应用程序中禁用控制台窗口的关闭按钮?

c# - 如何返回由数字文件夹名称组成的 DirectoryInfo 对象?

asp.net - 在asp.net中按日期对directoryinfo中的文件进行排序

c# - 应用程序设置 + DirectoryInfo/FileInfo

c# - 不能使用 NullableContextAttribute stub 类

c# - 在启动 TCP 服务器之前如何优雅地启动 C# TCP 客户端

.net - svcutil.exe - 生成的代理不允许为空字段

c# - 使用任务并行库时得到奇怪的结果?