ユーザー入力に基づいてファイルを含む圧縮パッケージを作成する機能を持つプログラムを作成しようとしています。
これらのファイルを圧縮する前にハード ドライブに書き込む必要はありません。実際にハード ドライブに書き込まずにこれらのファイルを作成し、圧縮するにはどうすればよいでしょうか。
DotNetZip を使用しています。
こちらのドキュメント、具体的には「ストリームから取得したコンテンツを使用して zip を作成する」という例を参照してください。
using (ZipFile zip = new ZipFile())
{
ZipEntry e= zip.AddEntry("Content-From-Stream.bin", "basedirectory", StreamToRead);
e.Comment = "The content for entry in the zip file was obtained from a stream";
zip.AddFile("Readme.txt");
zip.Save(zipFileToCreate);
}
ファイルがまだストリーム形式になっていない場合は、ストリーム形式に変換する必要があります。おそらく、そのためにMemoryStreamを使用したいと思うでしょう。
私は SharpZipLib を使用していますが、DotNetZip が基本的な System.IO.Stream に対してすべてを実行できる場合は、書き込み先の MemoryStream をフィードするだけです。
ハードディスクへの書き込みは不要だから避けるべきではありません。それは逆です。圧縮プロセス全体をメモリ内で実行する必要がない場合は、ハードディスクに書き込むことで回避してください。
ハードディスクは、メモリよりも大量のデータを格納するのに適しています。万が一、zip ファイルのサイズが約 1 GB になると、アプリケーションがクラックするか、少なくともシステムの速度低下を引き起こす可能性があります。ハード ドライブに直接書き込む場合、zip のサイズは数ギガバイトになる可能性がありますが、問題は発生しません。