System.IO.Compression を使用してメモリ内に ZIP アーカイブを作成する: 無効な ZIP エラーを克服する
で ZIP アーカイブを作成しようとしたときMemoryStream を使用してメモリに保存すると、アーカイブは作成されたものの、必要なコンテンツが欠けているという問題が発生する可能性があります。この問題は、アーカイブを完了するためにチェックサムなどの最終バイトをアーカイブに書き込む必要があるために発生します。
これを解決するには、次の修正コードを使用できます:
using (var memoryStream = new MemoryStream()) { using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true)) { var demoFile = archive.CreateEntry("foo.txt"); using (var entryStream = demoFile.Open()) using (var streamWriter = new StreamWriter(entryStream)) { streamWriter.Write("Bar!"); } } using (var fileStream = new FileStream(@"C:\Temp\test.zip", FileMode.Create)) { memoryStream.Seek(0, SeekOrigin.Begin); memoryStream.CopyTo(fileStream); } }
ここでの主な違いは、ZipArchive コンストラクターの 3 番目のパラメーターが true に設定されていることです。このパラメーターは、基になるストリームを閉じずに ZipArchive を破棄できることを示します。これにより、アーカイブの作成後に MemoryStream を再利用できます。
変更されたコードを使用すると、MemoryStream を使用している場合でも、目的のコンテンツを含む ZIP アーカイブをメモリ内に正常に作成できます。この柔軟性により、中間ファイル処理を必要とせずに、さまざまなシナリオでアーカイブを操作できます。
以上がC# を使用してインメモリ ZIP アーカイブを正常に作成し、「無効な ZIP」エラーを回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。