首页 > 解决方案 > 使用前缀 \\?\ 压缩长文件会导致 zip 存档无效

问题描述

我正在尝试压缩很长的文件。我读过其他帖子,指出您应该在长文件名前加上 '\\?\' 才能使其正常工作。这当然可以让压缩过程正确完成。但是,在解压缩文件时,我收到错误“无效文件 \\?\myfile.txt”。这意味着它实际上是使用预先添加的长文件名指示符压缩我的文件。可以用长文件名进行压缩吗?

using (ZipArchive zip = ZipFile.Open(zipfinalpath, ZipArchiveMode.Create))
{
    for (int i = 0; i < fullfilepaths.Count; i++)
    {
        zip.CreateEntryFromFile(fullfilepaths[i], zipfilepaths[i]);
    }
}

标签: c#zip

解决方案


Windows 文件名中的最大字符数限制为260 个字符。在 .NET 4.6.2 及更高版本中,PathTooLong不再引发异常。所以你的代码工作正常。在这里阅读更多。

在 4.6.2 中,如果我们看到 >= MAX_PATH 的路径,我们将不再抛出 PathTooLongException。如果操作系统不喜欢它,我们将显示操作系统返回的任何错误(可能是 PathTooLong),但我们不会再猜测操作系统会做什么。

在本地组策略编辑器中,您可以“启用 Win32 长路径”,然后它就不会被截断。

本地组策略编辑器


编写了一个库来克服这些问题。请参阅Delimon.Win32.IO 库

根据图书馆信息:

该库是专门为克服 .NET Framework 使用长路径和文件名的限制而编写的。使用此库,您可以以编程方式浏览、访问、写入、删除等 System.IO 命名空间无法访问的文件和文件夹。Delimon.Win32.IO 取代了 System.IO 的基本文件功能,并支持最多32,767个 字符的文件和文件夹名称。这个库是在 .NET Framework 4.0 上编写的,可以在 x86 和 x64 系统上使用。


推荐阅读