お世話になります。
VS2013 Win32 コンソールアプリケーション
スタティックライブラリでMFCを使用する
共通言語ランタイムサポートを使用しない
で開発中です。
やりたいことは、
zlibを使って、
①複数のファイルを圧縮してひとまとめする。(書庫は作らない?)
②ひとまとめしたものを解凍する。(書庫は作らないで解凍)
という言葉にすると非常に簡単な動作なのですが、どうにもzlibの関数compressと
uncomprssの使い方が分からず(引数の意味や、その内容が全く理解できません)、力を
貸していただきたく投稿させていただきます。
いろいろサイトを調べたのですが、ざっくばらんに書かれていて理解できず、UNIX環境の
ものばかりとかで手も足も出ない状態です。
こんな風に使うんだ。という手順を提示して戴けると助かります。
よろしくお願いします。
現在、zlibのサイトからソースを落としてきて(h.c)コンパイル→zlib.libを生成
zlib.libを開発しているプロジェクトに読み込み(スタティックリンク)、必要なヘッダ
zconf.h,zlib.h,zutil.hをソース元にコピーし、#include zlib.h
して、とりあえずcompress()などの関数を認識できるところまでしかできていません。
よろしくお願いします。
試せる環境がありませんが……
https://oku.edu.mie-u.ac.jp/~okumura/compression/zlib.html
とか参考にはならないですか?
compress()/uncompress()で処理しようと思ったら…
>①複数のファイルを圧縮してひとまとめする。(書庫は作らない?)
>②ひとまとめしたものを解凍する。(書庫は作らないで解凍)
の「複数のファイル」をどういう扱いにするか?
という問題が発生するものと思われます。
tar形式のように繋げて一つのバイナリ列にする。とかの工夫が必要になるでしょう。
compress()/uncompress()は、与えられたバイナリ列を圧縮/展開するだけでファイルかど
うかは関与していないみたいですし。
先のページだと「使い方(高次関数)」のcomptest2.cに使用例がありますね。
1K単位で処理する。というサンプルですので渡すデータについてはページ内に説明があり
ます。
tar形式については
http://www.redout.net/data/tar.html
とかで解説されています。
どういう形式でバイナリ列にするか。については任意でしょうから、
ファイル名(100バイト)、データサイズ(4バイト)、データ本体(可変長)とかの単純なパ
ターンでもOKでしょう。
compress()なら第1引数で渡したアドレスから、第2引数で渡したサイズ分の領域に格納さ
れる…かと。
そこら辺のサンプル…となると、試せる環境がないとちょっと面倒ですかね。
# APIの使い方…って事ならスタティックリンクである必要はないのでzlibのDLL利用でも
いいんでしょうけども。
>瀬戸っぷさま
ご返答ありがとうございます。
compressで、1つのファイルを圧縮するテストプログラムは作れましたが…やはり複数の
ファイルをまとめるというのはデフォルトではできないのですね。
ファイルの名前とか覚えておかないといけないでしょうし。このような対処処理を自分で
ぱぱっとコーディングできればよいのでしょうけど…。
http://see-ku.com/sklib/08.skzipio/index.html
こちらのサイトさんが、(compress利用では無いようですが)複数ファイルを圧縮・解凍
するプログラムを公開しているのでソースを見ているところです。
解決はしていないのですが、違う方法を選んだのでこの質問はクローズします。
ありがとうございました。