我应该如何将ZipArchive与内存流一起使用?

时间:2014-02-12 19:33:09

标签: c# memorystream ziparchive

我的问题是,只要处置ZipArchive,它就会自动关闭并处置MemoryStream。如果我在处理ZipArchive之前查看流,则信息的格式不完整。

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文件打开,那就错了。 (在最终的代码中,我不想在崩溃处理代码中实现文件。)

1 个答案:

答案 0 :(得分:13)

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

这解决了我的问题。