エントリが 1 つのコードから新しい ZIP パッケージを作成し、その ZIP パッケージをファイルに保存しようとしています。System.IO.Compression.ZipArchiveクラスでこれを達成しようとしています。次のコードで ZIP パッケージを作成しています。
using (MemoryStream zipStream = new MemoryStream())
{
using (ZipArchive zip = new ZipArchive(zipStream, ZipArchiveMode.Create))
{
var entry = zip.CreateEntry("test.txt");
using (StreamWriter sw = new StreamWriter(entry.Open()))
{
sw.WriteLine(
"Etiam eros nunc, hendrerit nec malesuada vitae, pretium at ligula.");
}
次に、ZIP を WinRT のいずれかのファイルに保存します。
var file = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync("test.zip", CreationCollisionOption.ReplaceExisting);
zipStream.Position = 0;
using (Stream s = await file.OpenStreamForWriteAsync())
{
zipStream.CopyTo(s);
}
または、通常の .NET 4.5 では:
using (FileStream fs = new FileStream(@"C:\Temp\test.zip", FileMode.Create))
{
zipStream.Position = 0;
zipStream.CopyTo(fs);
}
しかし、生成されたファイルは Windows エクスプローラーや WinRAR などでも開くことができません (生成されたファイルのサイズが zipStream の長さと一致することを確認したので、ストリーム自体は正しくファイルに保存されました)
。何か間違ったことをしているのですか、それとも ZipArchive クラスに問題がありますか?