我的问题是,只要处置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文件打开,那就错了。 (在最终的代码中,我不想在崩溃处理代码中实现文件。)
答案 0 :(得分:13)
我刚遇到同样的问题,我注意到ZipArchive
构造函数有一个名为leaveOpen
的可选参数。文档说:True to leave the stream open after the System.IO.Compression.ZipArchive object is disposed; otherwise, false
。
这解决了我的问题。