【问题标题】:Reading a ZIP without extracting C#在不提取 C# 的情况下读取 ZIP
【发布时间】:2013-08-31 15:26:21
【问题描述】:

我有一个很大的 ZIP 文件,其中包含许多目录以及数以万计的小文件,每个目录都需要读取。

使用 7-Zip 从 ZIP 中提取它们的过程需要很长时间。在 C# 中,我可以先将整个 ZIP 提取到某个位置,然后再对其进行操作,但理想情况下,我只想一次将一个文件从 ZIP 读取到内存中,而不必将其提取到磁盘上的某个位置。

我查看了原生 C# ZIP 实用程序以及 DotNetZip 和 SharpZipLib,但没有看到任何与我所追求的直接相关的内容。

这可以做到吗?与一开始的简单提取相比,它实际上是否会提供任何性能优势?

【问题讨论】:

  • 您可以使用任何这些库以Stream 的身份打开 Zip。
  • 内存比驱动器 IO 快得多,因此您应该会看到流式传输而不是提取带来的显着性能优势。

标签: c# .net zip dotnetzip


【解决方案1】:
using (ZipArchive zipFile = ZipFile.OpenRead(zipPath))
        {
            foreach(ZipArchiveEntry zip in zipFile.Entries)
            {
                System.Console.WriteLine("Zipfile: {0}", zip.FullName);
                System.Console.WriteLine("Zipfile: {0}", zip.Length);
            }
        }

【讨论】:

    【解决方案2】:

    您可以使用 DotNetZip 从 zip 文件中提取每个文件名(及其属性)。

    using (ZipFile zipFile = ZipFile.Read(ExistingZipFile))
    {
      foreach (ZipEntry zip in zipFile)
      {
          System.Console.WriteLine("Zipfile: {0}", zip.FileName);
          System.Console.WriteLine("Zipfile: {0}", zip.Comment);
      }
    }
    

    见:https://www.nuget.org/packages/DotNetZip/ 旧存档:https://archive.codeplex.com/?p=dotnetzip

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2018-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多