ホームページ > バックエンド開発 > C++ > C# を使用してインメモリ ZIP アーカイブを正常に作成し、「無効な ZIP」エラーを回避する方法

C# を使用してインメモリ ZIP アーカイブを正常に作成し、「無効な ZIP」エラーを回避する方法

Barbara Streisand
リリース: 2025-01-07 00:33:46
オリジナル
227 人が閲覧しました

How to Successfully Create an In-Memory ZIP Archive Using C# and Avoid the

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート