tar32.dllでのtar.gz圧縮方法について

[戻る]
きゅあ 2011/02/24(木) 15:23:18
【開発環境】
VC++2005(.NET)
WindowsXP SP3

tar32.dllを使用した、
tar.gz形式に圧縮書庫化する方法について質問です。

圧縮書庫化後のフォルダ構成が以下のような、
tar.gzファイルを作成したいのです。

【tar.gz形式にしたいファイルとフォルダの構成】

C:\
 |
 和aa
   |
   話bb
     |
     炉ile_1
     |
     歪cc
       |
       炉ile_11
       |
       炉ile_12


【tar.gzファイルのフォルダ構成(理想)】

/(root)
 |
 炉ile_1
 |
 歪cc
   |
   炉ile_11
   |
   炉ile_12

フォルダcccをフォルダ毎圧縮書庫化したいのですが、
プログラムで、tar()に渡すパラメータが分かりません。

たとえば、以下のtarを呼び出すコードでは、
tar("zcf C:\\test\\hoge.tar.gz File_1 C:\\aaa\\bbb\\ccc");

以下のような結果になってしまいます。

【tar.gzファイルのフォルダ構成(現実)】

/(root)
 |
 炉ile_1
 |
 呂:
   |
   和aa
     |
     話bb
       |
       歪cc
         |
         炉ile_11
         |
         炉ile_12

tar32.dllのSDKドキュメントも見ましたが、
このケースに該当する例が見当たりませんでした。

初歩的な質問かもしれませんが、
ご教授お願いいたします。

瀬戸っぷ [E-Mail] 2011/02/26(土) 01:59:24
カレントディレクトリを C:\aaa\bbb にした後で、
tar("zcf C:\\test\\hoge.tar.gz File_1 ccc");
で行けませんか?

AR 2011/02/28(月) 12:38:45
 きゅあさんの記述では絶対パス格納になっているので、瀬戸っぷさんのおっしゃる通
り、カレントを移動する必要があります。
 統合アーカイバプロジェクトでは、これを基準ディレクトリという表現を使われてい
たと思いますが、これを省略せず、アーカイブ対象はここから相対パスで指定しなけれ
ばなりません。

 統合アーカイバプロジェクトのDLLはUNLHA32.DLLの影響を強く受けていますので、考
え方などはそちらを参考にすると良いと思います。

きゅあ 2011/02/28(月) 12:47:33
[[解決]]
レスが遅くなり、申し訳ありません。
瀬戸っぷさん、ARさん、ありがとうございました。

瀬戸っぷさんにご提示頂いた方法でうまくいきました。

tar("zcf C:\\test\\hoge.tar.gz File_1 ccc");

カレントディレクトリの移動を入れることについては、
tar処理の前で、カレントディレクトリはC:\aaa\bbbであることを確認しているため、
今回の場合はtarの第2引数を相対パスに変更するだけで上手くいきました。

もうちょっと勉強しないといけませんね ^^;

AR 2011/03/01(火) 12:42:44
 ちょっと誤解されるような書き方をしてしまったので、私が使っている実例も挙げて
おきます。
 「e:\d.sql」というファイルをgzip圧縮、圧縮率9を指定して相対パス指定格納をする
例です。

 私が紹介した基準ディレクトリとは、"E:\"の部分を指します。
 tarコマンドのコマンドラインオプションはあまり意識しないほうがいいかもしれませ
ん。

-c -v -z9 --use-directory=1 -f "E:\d.tgz" -o "E:\" "@C:\<レスポンスファイルの
フルパス>"
レスポンスファイルの中身 = "d.sql"

古いスレッドには追加発言できません。