クライアントからzipファイルを受け取り、ファイルを解凍するサーバーを作成しています。zip ファイルを受信したら、メモリに保存します。
zlibやminizipなどのzipファイルをアップジップするライブラリを見つけて試してみましたが、それらはすべてメモリからではなくディスク上に存在するファイルを解凍します。
ファイルを一時的にディスクに保存して抽出したくありません。効率的ではありません。
メモリからファイルを解凍する方法は? 私は Windows で C と C++ を書いています。
libarchiveを見てください それはzip形式をサポートしています。
メモリ内のアーカイブを抽出する例:
struct archive *a = archive_read_new();
archive_read_support_compression_gzip(a);
archive_read_support_format_tar(a);
r = archive_read_open_memory(a, buff, sizeof(buff));
zlib は、メモリー内の inflate() および deflate() 関数をサポートしています。読み方はこちらから
libzip (zlib ベース) には、メモリからアーカイブを開く機能があります。サンプルコードはgithub にあります。
src = zip_source_buffer_create(data, size, 1, &error)
za = zip_open_from_source(src, 0, &error)