0

DeflateStream は、標準の .zip アーカイブとして保存できるアーカイブ ストリームを作成することになっていますか?

ローカル ファイルからインメモリ zip (リモートで送信) を作成しようとしています。DeflateStream を使用して、ローカル ディスク上のファイルから圧縮されたバイト配列を取得しました。

public static byte[] ZipFile(string csvFullPath)
    {
        using (FileStream csvStream = File.Open(csvFullPath, FileMode.Open, FileAccess.Read))
        {
            using (MemoryStream compressStream = new MemoryStream())
            {
                using (DeflateStream deflateStream = new DeflateStream(compressStream, CompressionLevel.Optimal))
                {
                    csvStream.CopyTo(deflateStream);
                    deflateStream.Close();
                    return compressStream.ToArray();
                }
            }
        }
    }

これはうまくいきます。ただし、結果のバイトを zip ファイルにダンプすると、次のようになります。

byte[] zippedBytes = ZipFile(FileName);
File.WriteAllBytes("Sample.zip", zippedBytes);

結果の .zip アーカイブを、Windows 組み込みの .zip 機能 (または他のサード パーティのアーカイブ ツール) で開くことができません。

私が現在計画している代替手段は、ZipArchive を使用することです - ただし、それにはディスク上に一時ファイルを作成する必要があります (最初にファイルを別のディレクトリにコピーし、次に圧縮し、バイト配列に読み取ってから削除します)。

4

1 に答える 1