ZipFile.ExtractToDirectory抛出长文件名

时间:2018-03-08 16:15:11

标签: c# .net io zipfile

我正在提取像这样的

的zip文件
TextIO.Write

但我得到了一个

ZipFile.ExtractToDirectory(zipFile, extractTo);

zip文件包含一个路径非常长且文件名为c.a的文件。总共280个字符。我不确定这是否是我启用了长路径的问题,如https://blogs.msdn.microsoft.com/jeremykuhne/2016/07/30/net-4-6-2-and-long-paths-on-windows-10/

所示

如果我在资源管理器中打开路径,它会打开,但文件名长的文件不存在。如果我打开zip文件,那么文件就在那里,因此在提取具有长文件名的文件时似乎存在问题。

是否可以在zip解压缩期间跳过文件或允许提取具有长文件名的文件?

2 个答案:

答案 0 :(得分:2)

using (ZipArchive archive = ZipFile.OpenRead(zipPath))
{
    foreach (ZipArchiveEntry entry in archive.Entries)
    {
        if (entry.FullName.Length > 280)
            continue;

        entry.ExtractToFile(Path.Combine("your path", entry.FullName));
    }
} 

ZipFile.OpenRead将允许您检查zip文件的内容。然后,您可以枚举.Entries属性以查找存档中的所有文件,并根据文件名长度决定是否要继续提取。

答案 1 :(得分:1)

如果您使用的是基于Windows的文件系统,则文件名的最大长度为255个字符。注意:计算文件名长度时,文件夹路径包含在文件名中。如果您有一个长文件夹路径,那么您可能想尝试解压缩到c:\ temp,它只使用7个字符。因此,您可以使用248个字符。如果文件名的长度超过归档中的文件名,则可能需要首先解决该问题,不必从提取中排除文件。

https://msdn.microsoft.com/en-us/library/windows/desktop/ee681827(v=vs.85).aspx

http://www.ntfs.com/ntfs_vs_fat.htm

Maximum filename length in NTFS (Windows XP and Windows Vista)?