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 を使用することです - ただし、それにはディスク上に一時ファイルを作成する必要があります (最初にファイルを別のディレクトリにコピーし、次に圧縮し、バイト配列に読み取ってから削除します)。