ホームページ > バックエンド開発 > C++ > FileStream を使用せずに、.NET で MemoryStream を使用して ZIP アーカイブを作成できますか?

FileStream を使用せずに、.NET で MemoryStream を使用して ZIP アーカイブを作成できますか?

Linda Hamilton
リリース: 2025-01-06 22:54:41
オリジナル
438 人が閲覧しました

Can I Create a ZIP Archive Using MemoryStream in .NET Without Using FileStream?

MemoryStream を使用した ZIP アーカイブの作成

.NET でのデータ操作の興味深い側面の 1 つは、メモリ内でデータを操作できることです。このコンテキストでは、MemoryStream オブジェクトを使用してデータを保存し、ディスク上のファイルの動作を模倣することが一般的です。ただし、ZIP アーカイブの作成に関しては、MemoryStream の使用に関連する注意点があるようです。

次のシナリオを考えてみましょう: MemoryStream を使用して ZIP アーカイブを作成し、その後テキストへの書き込み操作を行う試みアーカイブ内のファイルを削除すると、テキスト ファイルが著しく欠落した不完全なアーカイブ ファイルが作成されます。ただし、FileStream を直接使用すると、アーカイブは正常に作成されます。この矛盾により、FileStream アプローチを避けて、MemoryStream を使用して ZIP アーカイブを作成できるかどうかという疑問が生じます。

その答えは、アーカイブの作成に使用される ZipArchive クラスの複雑さを理解することにあります。結局のところ、ZipArchive コンストラクターには追加パラメーター LeaveOpen があり、デフォルトは false です。このパラメータを true に設定すると、アーカイブが廃棄時に閉じられなくなり、さらなる操作が可能になります。アーカイブ書き込みプロセスでは、完了したとみなされる前にチェックサムなどの最終情報を追加する必要があるため、この動作は不可欠です。

これを実現するには、提供されているコード サンプルを次のように変更できます。

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!");
        }
    }

    memoryStream.Seek(0, SeekOrigin.Begin);
    using (var fileStream = new FileStream("C:\Temp\test.zip", FileMode.Create))
    {
        memoryStream.CopyTo(fileStream);
    }
}
ログイン後にコピー

この変更されたコードでは、leaveOpen を true に設定すると、アーカイブを開いたままにすることができ、その後の Seek 操作により、メモリ内のアーカイブがファイル ストリームに書き込まれる準備が整います。完全な ZIP アーカイブ。このアプローチにより、MemoryStream の使用時にアーカイブ内でファイルが見つからない問題が解決されます。

以上がFileStream を使用せずに、.NET で MemoryStream を使用して ZIP アーカイブを作成できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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