私が思っていたのは、
そっくりそのままzipファイル化 & そっくりそのまま解凍
です。
たとえば、
Cドライブ直下に "abc" ディレクトリがあり、そのディレクトリには
- ファイル1.gif
- ファイル2.jpg
- ファイル3.png
- ファイル4.bmp
- ファイル5.html
- "info" ディレクトリ ( サブディレクトリ )
があり、 "info" ディレクトリには
- burner.jpg
- ファイル6.css
- ファイル7.css
とあるとします。
これをそっくりそのまま zip化して、解凍した場合でも同じような階層にしたいのです。
ですが、私のやり方が悪いのか 7-Zipでやると
解凍すると
一つのディレクトリに
- ファイル1.gif
- ファイル2.jpg
- ファイル3.png
- ファイル4.bmp
- ファイル5.html
- burner.jpg
- ファイル6.css
- ファイル7.css
とサブディレクトリ以降のファイルもすべて一つの階層に集まっています。
圧縮は、WindowsのExplorerで
右クリック -> "送る" -> "圧縮(zip形式)フォルダ"
でやって、以下の CCompressor::Unpack関数 で解凍してみました。
C++
1// 必要なヘッダファイル等はインクルード済みとする。 2 3 4 5// CCompressorクラスという自作クラスのメンバとして。 6 7// string CompressedFilePath はメンバ変数。コンストラクタですでに受け取っているとする。 8 9bool CCompressor::Unpack( char *ToDir ){ 10 string cmd; 11 12 char result[1000]; 13 14 cmd = "e "; 15 cmd += this->CompressedFilePath; 16 cmd += " "; 17 if( ToDir != NULL ){ 18 cmd += " -o"; 19 cmd += ToDir; 20 } 21 cmd += " -hide"; 22 if( this->PassWord.empty() != true ){ 23 cmd += " -p"; 24 cmd += PassWord; 25 } 26 27 28 if( SevenZip( NULL, cmd.c_str(), result, 1000 ) == 0 ){ 29 return true; 30 }else{ 31 return false; 32 } 33}
- 第二引数は
e ZIPFILE -hide ( -o DIRECTORY ) ( -pPASSWORD )
としています。
これって7-Zipの仕様なのでしょうか?
それとも方法があるのでしょうか?
[環境等]
言語 : C/C++
コンパイラ : MinGW
別途 使うDLL: 7-Zip32.dll
宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。