2,3質問があります。
まず、私は趣味でC++をやっています。一応Qtを使っていますが、今回は(多分)そこまで関係がないので割愛します。
7-Zip32.dllに関してです。
DLした7-Zip32.dllですが、「7-ZIP32.DLL Version 9.22.00.02」となっています。( 注意: Q3は書いていて意味がわからなくなったので排除。Q1, Q2のみです。 )
[前提]: 7-Zip32.dll (以降7Z) で編集(追加,削除etc.) を行ったZIPファイルや7Zが対応している圧縮ファイル等を操作する
Q1. 解凍をせずに読み込むことは可能か?
例えば 調べた範囲ではJavaのjarファイルは実際にはzipファイルだそうです。
で、私はできれば例えば installdata.zip として実行ファイルと同じディレクトリかサブディレクトリ内に置いておき、
あたかも普通のバイナリファイル( *.bin etc. ) やテキストファイルとして読み込むような感じで
メモリ上に展開するというのでしょうか? 解凍せずにデータを読み込む方法はありますでしょうか?
一時的に解凍 -> 終了間際 ( main関数から抜けるとき等 ) にそれらを削除 ...
でもいいですが、この方法だとGUIのときは 閉じる命令 ( メッセージ ) が飛んで来たら 行えばいいですが、
一括処理等のようなCUI(でやるような)場合、なんらかの理由で中断する場合、解凍したファイルが残っているで
自分で削除しないといけないです。
これをJavaでの jarファイルのように「解凍せずに」使用する方法はありますでしょうか?
最終的にはzipファイルから取り出しているので解凍しているはずですが、
名称が思いつかないので「解凍せずに」としました。
やはりWindowsとかの一時フォルダとかに解凍して...ってなるのでしょうか?
Q2. 7Zで生成した自己解凍書庫のアイコンを変えることは可能でしょうか?
ショートカットファイル ( *.lnk ) で設定できるのはわかっていますが、
できれば自己解凍書庫自体のアイコンを変えることができればやりたいのですが。
もしライセンス表示のようなもの ( Qtで言えば aboutQt関数みたいな? ) 等のように無理ならいいですが。
そこまで強い要望ではないので。
~~
Q3. 自己解凍書庫のとき、7z.sfxを使っているのですが、同梱の7-zipCMD.txtの"-sfx"の項目を見ると
「設定ファイル」というのがあるみたいです。
解凍するときのウィンドウのタイトルや解凍場所( ディレクトリ ) 等を指定できるみたいです。
ですが、これの使い方がよくわかりません。~~
( 一応、生成時はそのまま自己解凍書庫を生成しています。(zipファイルも7zファイルも仲介していない状態。)
( 仲介するなら zipファイルか? )
例えばコマンド ( SevenZip関数に渡す引数の一つとして )として、
"a -sfx7z.sfx HELLO.EXE C:\test\cpp\file1.txt -dDEFINITION.txt"
のように -d<定義ファイルのパス> といった感じで認識させるとか、sfxを操作する実行ファイル側と同じディレクトリに定義ファイルを置くとか、
自己解凍書庫と同じディレクトリに定義ファイルを置くとか...
~~
それぞれ試してみましたが、どれも変わりませんでした。( デフォルトのまま。 )~~
~~
必要なものは 7z.sfx,自己解凍書庫の名前, 自己解凍書庫にするファイル( *.zip ) の3つですよね?~~
書いていて思ったのですが、もしかして 一旦7zにしないといけないってことでしょうか?
[情報]
言語: C++ ( C++11 )
コンパイラ: MinGW
OS: Windows 10
7-Zip32.dllのバージョン: 7-ZIP32.DLL Version 9.22.00.02
[追記1]
t_obaraさんの修正依頼(?)を読みました。
あ、確かにそうですね。外出先から書いているので完全に再現することはできませんが、
まず、動的リンクをしていて、関数はSevenZip関数, 列挙系関数群 ( FindFirstとか ) を使える状態にしてあります。
( もちろん 必要な構造体は用意してあります。 )
同梱の 7-zipAPI.txt を見てみると列挙系は
- アーカイブを開く
- FindFirstで読み取る -> エラーが返されたらここで終了
- while + FindNext で次々に読み取る
- アーカイブを閉じる
とやっています。で、3と4の間に(格納されている)ファイルのサイズやらを取得していますが。
解凍は SevenZipに渡す文字列コマンドは
x アーカイブ [解凍したいファイル] -o解凍先
だったと思います。( 外出先ですので。 )
一応テキストエディタ側の"検索" で"メモリ"をキーワードにして検索かけてみましたが、「圧縮時のメモリ」云々で今回とは関係なさそうだったので...
(もうちょっと情報は必要ですか? 今外出先なので手元に問題のファイルがない...orz)
[ 追記2 ]
lunateaさんのコメント ( 修正依頼の方 ) 読みました。
すみません、書き方が悪かったみたいです。私が言いたかったのは、7-Zip32.dllのライセンスじゃなくて、アイコンを書き換えることができるかどうか。っていうことです。
スポーツは詳しくないですが、アディ○スとかのシューズをサッカー選手とかが使う場合、その会社のロゴは伏せることができませんよね。広告塔としての役割のため。
たとえば私が 7-Zip32.dllを使ってSFX(自己解凍書庫)にするソフトを作ってリリースしたとします。
それで生成したSFXのアイコンは7zのやつになっています。
これが広告塔の役割になって...ならアイコンは消せないはずなので。
そっちの意味で書いたのですが、書き方が悪かったですね。すみません。
回答2件
あなたの回答
tips
プレビュー