このコードは正常に動作します
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());
2 番目のサンプルの結果は、WinRar で修復した後に読み取ることができる破損した zip ファイルです。最初のサンプルは問題なく動作します。唯一の重要な違いは、2 番目のサンプルでは明示的にストアにファイルを追加していないことです。