DotNetZip には、解決策が見つからないように見える奇妙な問題があります。数時間検索しましたが、何も見つかりませんでした。
var ms = new MemoryStream();
using (var archive = new Ionic.Zip.ZipFile()) {
foreach (var file in files) {
// string byte[]
var entry = archive.AddEntry(file.Name, file.Data);
entry.ModifiedTime = DateTime.Now.AddYears(10); // Just for testing
}
archive.Save(ms);
}
return ms.GetBuffer();
かなり重要な変更時刻を追加する必要がありますが、現在はダミーのタイムスタンプしかありません。
WinRAR でファイルを開くと、「予期しないアーカイブの終了」と表示されます。個々のファイルのチェックサムは 00000000 で、WinRAR は「アーカイブの形式が不明であるか破損しています」と表示します。修理できます。これにより、サイズが 20% 小さくなり、すべてが正常になります。しかし、それは本当に役に立ちません..
zip.Entries
すべてのエントリを追加した後にブレークポイントを作成すると、すべてのエントリに同じ不正な CRC があることがわかりますが、すべてのデータはそこにあるように見えます。したがって、アーカイブを保存する方法が問題であってはなりません。
ファイル コレクションを別の場所で問題なく使用しているため、DotNetZip が奇妙になっています。それか、私が何かを誤解しています:)