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ファイル機能(またはその他のサードパーティ製のアーカイブツールを使用して)と結果の.zipアーカイブを開くことができません。
私はZIPARCHIVEを使用している今、計画しています代替 - しかし、ディスク上の一時ファイルを作成している必要がある(最初に別のディレクトリにファイルをコピーし、そしてその後、それを圧縮バイト配列にそれを読んで、それを削除します)
あなたは 'ZipArchive'クラスを使用する必要があります。ストリームで動作し、一時ファイルは必要ありません。 –