用前缀\\?\压缩长文件会导致无效的zip存档

时间:2019-08-22 20:03:39

标签: c# 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]);
    }
}

1 个答案:

答案 0 :(得分:1)

Windows文件名中的最大字符数限制为 260 个字符。在.NET 4.6.2和更高版本中,不再引发PathTooLong异常。因此您的代码正常工作。阅读更多here

  

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

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

Local Group Policy Editor


编写了一些库来克服这些问题。参见Delimon.Win32.IO library

根据图书馆信息:

  

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