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());

2 番目のサンプルの結果は、WinRar で修復した後に読み取ることができる破損した zip ファイルです。最初のサンプルは問題なく動作します。唯一の重要な違いは、2 番目のサンプルでは明示的にストアにファイルを追加していないことです。

4

1 に答える 1

1

データをファイルに保存する前に、 storer.Close() などを呼び出して中央ディレクトリに書き込む必要があるようです。

于 2013-03-28T09:12:38.530 に答える