【问题标题】:How am I supposed to use ZipArchive with memory streams? [duplicate]我应该如何将 ZipArchive 与内存流一起使用? [复制]
【发布时间】:2014-02-12 19:33:08
【问题描述】:

我的问题是,一旦ZipArchive 被处理,它就会自动关闭并处理MemoryStream。如果我在处理 ZipArchive 之前查看流,则信息不是格式正确的 zip。

using (var compressStream = new MemoryStream())
{
    using (var zipArchive = new ZipArchive(compressStream, ZipArchiveMode.Create))
    {
        // Adding a couple of entries
        string navStackInfo = Navigation.NavState.CurrentStackInfoLines();
        var navStackEntry = zipArchive.CreateEntry("NavStack.txt", CompressionLevel.NoCompression);
        using (StreamWriter writer = new StreamWriter(navStackEntry.Open()))
        {
             writer.Write(navStackInfo);
        }
        var debugInfoEntry = zipArchive.CreateEntry("CallStack.txt", CompressionLevel.Optimal);
        using (StreamWriter writer = new StreamWriter(debugInfoEntry.Open()))
        {
            // debugInfo.Details is a string too
            writer.Write(debugInfo.Details);
        }
        // ...
        // compressStream here is not well formed
    }
    // compressStream here is closed and disposed
}

那么这应该如何工作呢?也许唯一的问题是它的格式不正确?我在每个条目部分的开头看到“PK”标题编号文件中(不仅仅是在开头)。我不确定这是否好。当然,如果我将流保存到一个文件中,我无法将其作为 zip 文件打开,那就是有问题。 (不过,在最终代码中,我不想在崩溃处理代码中具体化文件。)

【问题讨论】:

  • 看起来你在 writer.Write(navStackInfo); 后面多了一个括号关闭 zipArchive。
  • @DavidN 谢谢,就在那里,因为在我的真实代码中有额外的空指针检查和东西,所以我简化了这个例子。
  • 顺便说一句,如果我说using (var zipArchive = ZipFile.Open(@"wtf.zip", ZipArchiveMode.Create),生成的物理 zip 文件格式正确,并且比我在 Stream 版本中看到的要大得多(50KB 对 10KB)。所以要么这些东西没有从ZipArchive 刷新到流中和/或流没有被刷新。我试图刷新流,但没有帮助。
  • 也许应该被认为是 stackoverflow.com/q/12347775/1178314 的重复,而且目前有一个更好接受的答案。
  • 我这里的正确答案也修改为 leaveOpen 一个。

标签: c# memorystream ziparchive


【解决方案1】:

我刚遇到同样的问题,我注意到ZipArchive 构造函数有一个可选参数,称为leaveOpen。文档说:True to leave the stream open after the System.IO.Compression.ZipArchive object is disposed; otherwise, false.

这解决了我的问题。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-05-31
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-22
  • 2019-08-26
  • 2023-03-22
相关资源
最近更新 更多