質問: 191488 Date Time Attr Size Compressed Name ------------------- ----- ------------ ------------ ------------------------ 2016-09-24 23:32:26 ....A 8496 29803 make\ab\BackgroundImages\black - コピー.jpg 2016-04-12 20:12:32 ....A 8493 make\ab\BackgroundImages\black.jpg 2016-09-24 19:28:16 ....A 8493 make\ab\BackgroundImages\glay.jpg 2016-10-03 16:56:10 ....A 8496 make\ab\BackgroundImages\purple.jpg 2016-07-02 22:30:42 ....A 10416054 make\ab\BackgroundImages\Blue.bmp 2016-04-07 20:43:58 ....A 10416054 make\ab\BackgroundImages\Pink.bmp 2016-04-07 20:27:46 ....A 10416054 make\ab\BackgroundImages\Red.bmp 2016-05-24 19:07:00 ....A 954 make\ab\ckw\ckw.cfg 2016-06-23 15:37:58 ....A 9885 make\ab\data\Excel2007.xlsx 2017-01-25 16:34:29 D.... 0 0 make\ab\BackgroundImages 2017-01-25 16:34:29 D.... 0 0 make\ab 2017-01-25 16:34:29 D.... 0 0 make ------------------- ----- ------------ ------------ ------------------------ 49660116 1106903 35 files, 5 folders ``` のようになります。 私が欲しいデータは、 ``` make\ab\BackgroundImages\black - コピー.jpg make\ab\BackgroundImages\black.jpg make\ab\BackgroundImages\glay.jpg make\ab\BackgroundImages\purple.jpg make\ab\BackgroundImages\Blue.bmp make\ab\BackgroundImages\Pink.bmp make\ab\BackgroundImages\Red.bmp make\ab\ckw\ckw.cfg make\ab\data\Excel2007.xlsx make\ab\BackgroundImages make\ab make ``` という風に改行でリストになっているか、 ``` make\ab\BackgroundImages\black - コピー.jpg,make\ab\BackgroundImages\black.jpg,make\ab\BackgroundImages\glay.jpg,make\ab\BackgroundImages\purple.jpg,make\ab\BackgroundImages\Blue.bmp,... ``` パスとしては認識されないコンマ (,) を区切り文字として一行の文字列 のようなものがほしいのですが。 本当は std::listとかstd::vectorとかに格納されている方が望ましいですが、これは自分でもできるためスルー。 実際に取得出来たデータを見てもどうやって切り取ればいいかがわかりません。 Excelのセルにあたるセットは半角スペースが "|" のような感じで区切られているようですが、 よく見ると自分が圧縮したファイルのパスに 半角スペースが... もし半角スペースを分岐点としてstrtok関数等で分割した場合、 実際に取得できたデータで言えば、 本来であれば make\ab\BackgroundImages\black - コピー.jpg でひとつであるはずが 半角スペースで区切られるために make\ab\BackgroundImages\black * コピー.jpg と三つの文字列に。 一番最初の "7-Zip (a) 9.22 beta Copyright..." とかは string::findで ヘッダ(?) の終わりを見つけ出して そこを string::replace で その部分を "" に置き換えればOKなので、スルー。 問題は、テーブルにある ファイルパスをどうやって取得するか。です。 一応、私が 7-Zip をダウンロードしたときに同梱されていた "7-zipCMD.txt" ( 第二引数で設定できるコマンド一覧 ) を見てみると、 ``` l : リスト ̄ ̄ ̄ ̄ ̄ 書庫の内容を取得します。 取得した内容は _szOutput に出力されます。 例: l archive.zip archive.zip の内容を _szOutput に出力されます。 このコマンドと共に使用できるスイッチ。 -ai, -an, -ax, -i, -p, -r, -scc, -slt, -t, -x ``` とありますが、 "このコマンドと..." にあるスイッチをすべて見てみましたが、「詳細データを取得する」, 「パスのみの取得」等のようなスイッチはありませんでした。 (言い回しが違う場合がありますが、それぽいのもない...) コマンドプロンプトで DIRコマンドを使ったとき、 ただ単に DIR と打ったら 日付 + 時間 + ( "" or なし ) + ファイルサイズ + ファイル名(またはディレクトリ名) と出ますよね。 DIR /B と打ったら ファイル名(またはディレクトリ名) だけ出力されますよね。 その "DIR /B" のときのような感じにしたいのです。 そうすれば 改行文字 を分岐点 ( 区切り文字 ) として分割すればいいだけですし。 これをやるにはどうすればいいのでしょうか? [環境等] 言語 : C/C++ ( Windows API あり ) コンパイラ: MinGW 宜しくお願い致します。
回答: SevenZipFindFirst 等のAPIを利用するのではないでしょうか?