【问题标题】:How to create a copy of a file having length more than 260 characters如何创建长度超过 260 个字符的文件的副本
【发布时间】:2017-06-29 18:54:06
【问题描述】:

如何使用 vb.net 创建长度超过 260 个字符的文件的副本,包括文件名

当我们尝试使用 File.Copy 方法创建副本时,它会抛出如下异常:

“指定的路径、文件名或两者都太长。完全限定的文件名必须少于 260 个字符,目录名必须少于 248 个字符。”

有没有可能,那请帮忙...

【问题讨论】:

    标签: vb.net excel


    【解决方案1】:

    您遇到了 MAX_PATH 限制。作为一种解决方法,您应该能够直接 P/Invoke 到 kernel32.dll 的 CopyFile 函数,并在目标路径前使用“\\?\”前缀来防止遇到 MAX_PATH 问题。

    请注意,虽然您能够以大多数应用无法打开文件的方式复制文件,但它们也受到 MAX_PATH 的限制。

    可以在这里找到问题的一个很好的概述:http://blogs.msdn.com/bclteam/archive/2007/02/13/long-paths-in-net-part-1-of-3-kim-hamilton.aspx

    可以在第 2 部分中找到使用 C# 对这些方法进行 P/Invoking 的一些示例代码:http://blogs.msdn.com/bclteam/archive/2007/03/26/long-paths-in-net-part-2-of-3-long-path-workarounds-kim-hamilton.aspx

    schnaader linked 看起来像它的库将为您省去 P/Invoking 到 kernel32.dll 的问题,不确定您是否要依赖外部 dll。

    【讨论】:

      【解决方案2】:

      有一些缩短名称的技巧...请参阅http://support.microsoft.com/?kbid=320081#上标题为“原因 4:文件存在于比 MAX_PATH 字符更深的路径中”的部分

      【讨论】:

      • 这是一个 Windows 限制。如果 FilePath 超过 260 个字符,大多数文件操作都会抛出类似的错误。我认为即使是文件重命名也会有问题
      • 马特的回答(使用CopyFile)比我的好。
      【解决方案3】:

      您会在此处找到支持长文件名的complete library

      【讨论】:

        【解决方案4】:

        我得到了关于这个问题的解决方案。

        在研发中我发现我们可以重命名指定的路径目录,即使总长度超过 260 个字符,然后我们可以将文件从指定位置复制到新的(临时)位置以进行扫描。最后我们可以再次将文件路径名重命名为原来的。

        【讨论】:

          【解决方案5】:

          jdelimon 已经指向 Delimon.Win32.IO 库,但他们最后一次更新它是 2012 年(.Net 2.0)。这是另一个库:AlphaFS

          他们升级到 .Net 4.5.2(2017 年 6 月 29 日)。我使用了一个非常短的#C 程序作为 Excel 的 COM 插件。请参阅 this link in how to create a programthis link for the copy-program。您只需将程序分配给 .NET 4.5,添加对 4.5 的 AlphaFS.dll 的引用并将using System.IO 替换为using Alphaleonis.Win32.Filesystem;

          【讨论】:

            【解决方案6】:

            在这种情况下我通常会做的是:

            1) 统计文件名length

            2) 如果FileNameLength > 259 则裁剪文件名以处理新名称,然后复制具有裁剪目标名称的文件。

            【讨论】:

              【解决方案7】:

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-04-11
                • 2018-06-21
                • 1970-01-01
                • 2018-02-01
                • 1970-01-01
                相关资源
                最近更新 更多