0

此代码工作正常

ZipStorer storer = ZipStorer.Create(@"H:\temp\sysInfo.zip", "");
if (systemInfoStream != null)
   storer.AddStream(ZipStorer.Compression.Deflate, "SystemInfo.txt", 
                    systemInfoStream, DateTime.Now, null);  

但是当我尝试手动使用 ZipStorer 的内部流时不能正常工作:

MemoryStream result = new MemoryStream();
ZipStorer storer =ZipStorer.Create(new MemoryStream(), "");
if (systemInfoStream != null) {
    storer.AddStream(ZipStorer.Compression.Deflate, "SystemInfo.txt", 
                     systemInfoStream, DateTime.Now, null);
    storer.ZipFileStream.Position = 0;
    storer.ZipFileStream.CopyTo(result);
}
File.WriteAllBytes(@"H:\temp\sysInfo.zip", result.ToArray());

第二个样本的结果是损坏的 zip 文件,用 WinRar 修复后可以读取。第一个样本工作得很好。我看到的唯一显着区别是,在第二个示例中,我没有明确地将文件添加到存储中。

4

1 回答 1

1

看起来您应该在将数据保存到文件之前调用类似 storer.Close() 的方法来编写中央目录。

于 2013-03-28T09:12:38.530 回答