堕天使の煉獄
2017-02
14
07:18:20
見つけちゃった物だから
書庫編集ツール。
とりあえず一段落ーとおもっていたのですがQTemporaryDirなるものを見つけてしまったりで。
システムの一時フォルダを簡単に作れる感じの。QTemporaryFileってのがあるのは知ってたんですが、これのディレクトリ版があるとは。わりと最近追加された物っぽいですけど。
結構この一時ファイル、OSとかシステム変わると場所ちがったりとかで、そんでもってQTからはあんましWinAPIを直で触りたくない(=windous.hをインクルードしたくない)てのもあって。
そんでこんなんあるんだったら、一旦やめにした、zip以外の書庫→zip書庫のコンバート機能も追加したいなと。
まあそもそも、アーカイバの解凍機能にメモリ上に解凍があればもっと楽なんですけどね……なぜか軒並みこの機能だけ関数はリファレンスに載ってはいる物の、「未実装です」の文字がついてるですよね。
その所為でどっかに一時フォルダつくってそこに解凍して使い終わったら削除~まわりのそこそこ煩雑な処理書くハメになるので……。
あと一旦ディスクに書き込むので遅いしね。
あとは愚痴としては、なんで各アーカイバの解凍コマンドきっちり統一されてないのかと……。
大抵は-xで解凍でこれは統一されてるのかとおもったら7-zip32だと-なしのxだけとか、意外にバラバラ。
結局コマンド毎に各アーカイバ別に個別にコマンドを生成するような感じにしないと単一のインターフェースで扱えなかったりでうっとおしい。
そんな感じでunrar32、7-zip32、ついでにunzip32(自前の解凍ルーチンで非対応書庫の場合の予備で)で解凍→zip書庫作成できるように。
一寸困ったのが、ファイルはそのままファイル自体に情報ついてるのでいいのだけど、ディレクトリの更新日時がおかしくなってしまったりで。
……なんにも考えずにディレクトリパスからlastmodefy取得するルーチンにしてたらディレクトリの日付が2073年とかになっててワラタ。
そいやなんかunifyzipのvectorのとこのコメントでそれに関連しそうなの見た覚えあるな……と見に行ったらば「フォルダの更新日時が変わってしまうところが不満」みたいなのが。
でもこれって、一時ファイルに解凍したときにディレクトリってそこで作られるんだよなぁ。
んで、zip書庫内ではディレクトリって「これはディレクトリだよ」っていうデータ上のヘッダデータがあるだけで、ディレクトリというもの自体が保存されてるわけでない(そもそもそんなんできるものではない)で、解凍とか展開時にディレクトリを示すヘッダがあったらディレクトリを作成するっていう目印ていどのものなのですよね。
そんなかんじなのでアーカイバのコマンドラインから一括解凍してる場合はディレクトリの更新日時て簡単に取得できないんですよね。
出来ない事はないかもですが、一括解凍じゃなくて個別に解凍しながらチェックするとか、ディレクトリヘッダだけ検索してリストアップするとか……そもこれはzip書庫のフォーマットの話で他の書庫だとディレクトリの扱いどうなってるのかしらないのでアレですけど……。
一旦ディスクに書き出してから再圧縮の流れだと、一時フォルダのなかに展開するときに作成したディレクトリの日付になっちゃうのはまあ、それでいいかーとかおもっちゃったり。
ファイルの日付ならともかく、ディレクトリの日付とかあんま気にしなきゃいけないケースで無いような気もするし。
とかく統合アーカイバ系で細かい操作とかめんどくさいので一括解凍以外やりたくないというのが本音(ぉ
自前処理のzip→zipの場合はこのディレクトリアイテムもヘッダごとコピーなので更新日時は変更しなくても済むぽ。書庫内のデータをバイナリで右から左に移してるだけなので。
アーカイバもメモリ上に展開が出来ればこの辺クリアできそうなんですけど。実際にディスクに一旦書くからややこしいことに……。
とりあえずこれでついにunifyzip使わなくてもすむ形になったかな。zip以外→zip書庫の際におこなう冗長ディレクトリ除去とかフィルタリングとかも付けたし。
あとはちょっと悩んだのが件のQTemporaryDir
{
QTemporaryDir dir; // ここで一時ディレクトリ作成
if (dir.isValid()) {
// dir.path() returns the unique directory path
// なんかする
}
}// ここで一時ディレクトリの中身全部クリアされる
使い方的にはたったこれだけなんでとっても簡単。スコープ抜けたら削除というのはわかりやすくて良いですね。
実際にはシステムディレクトリのappなんとかのユーザー名/アプリ名のなかにさらにユニークな名前の一時フォルダがつくられるのですが、このユニークな名前ってのがどうやって取得しているのかと。
この手のは大抵は現在時刻を種にしたユニークな文字列を付加するのですがシステムのディレクトリでなく、一時フォルダの場所を自分で指定するようなものも欲しいなというところで(うちは違うのでアレだけどSSDとか使ってる場合は場所指定出来た方が良いだろうなーとおもたので)自分で似たようなのつくろうとおもうと、このユニークな文字のジェネレータだけどこかにない物かと思ったりで。
ttp://doc.qt.io/qt-5/qtemporarydir.html
でもQTemporaryDirのドキュメントみてみると
QTemporaryDir(const QString &templatePath)
これってまんま、ここにパスいれたらその直下にユニークな名前のディレクトリ作ってくれるコンストラクタなんじゃねーのと思うのですが、なにやら説明みるとちがうっぽい。英語なのでよくわからん。
実際に試してみると、引数のtemplatePathにユニークな文字が付加された文字列がdir.path()で返ってくるように。
templatePathという名前からして、どうもこれがユニークな文字のジェネレータっぽいんですが……。
static QString QTemporaryDir::templatePath(const QString &templatePath);
じゃあかんかったんかコレ……
コンストラクタで別の機能なかんじなので、ちょと時間おいて利用コード後から見たら、うん? ここで一時フォルダ作ってるっぽいけどすぐ閉じてて意味ないじゃん。スコープ抜けたら一時フォルダ消えちゃうんだし。
うっかりこんなコード書いたのかな。とりあえずunique_ptrに放り込んだコードに書き直すか……と半分ぐらい書いたところで、これユニークな文字のジェネレータだったわ……と気づいたりしたしw
そんな感じで結局今日もがっつりPGやってしまった……
でも今度こそ一段落ぽ……。
とりあえず一段落ーとおもっていたのですがQTemporaryDirなるものを見つけてしまったりで。
システムの一時フォルダを簡単に作れる感じの。QTemporaryFileってのがあるのは知ってたんですが、これのディレクトリ版があるとは。わりと最近追加された物っぽいですけど。
結構この一時ファイル、OSとかシステム変わると場所ちがったりとかで、そんでもってQTからはあんましWinAPIを直で触りたくない(=windous.hをインクルードしたくない)てのもあって。
そんでこんなんあるんだったら、一旦やめにした、zip以外の書庫→zip書庫のコンバート機能も追加したいなと。
まあそもそも、アーカイバの解凍機能にメモリ上に解凍があればもっと楽なんですけどね……なぜか軒並みこの機能だけ関数はリファレンスに載ってはいる物の、「未実装です」の文字がついてるですよね。
その所為でどっかに一時フォルダつくってそこに解凍して使い終わったら削除~まわりのそこそこ煩雑な処理書くハメになるので……。
あと一旦ディスクに書き込むので遅いしね。
あとは愚痴としては、なんで各アーカイバの解凍コマンドきっちり統一されてないのかと……。
大抵は-xで解凍でこれは統一されてるのかとおもったら7-zip32だと-なしのxだけとか、意外にバラバラ。
結局コマンド毎に各アーカイバ別に個別にコマンドを生成するような感じにしないと単一のインターフェースで扱えなかったりでうっとおしい。
そんな感じでunrar32、7-zip32、ついでにunzip32(自前の解凍ルーチンで非対応書庫の場合の予備で)で解凍→zip書庫作成できるように。
一寸困ったのが、ファイルはそのままファイル自体に情報ついてるのでいいのだけど、ディレクトリの更新日時がおかしくなってしまったりで。
……なんにも考えずにディレクトリパスからlastmodefy取得するルーチンにしてたらディレクトリの日付が2073年とかになっててワラタ。
そいやなんかunifyzipのvectorのとこのコメントでそれに関連しそうなの見た覚えあるな……と見に行ったらば「フォルダの更新日時が変わってしまうところが不満」みたいなのが。
でもこれって、一時ファイルに解凍したときにディレクトリってそこで作られるんだよなぁ。
んで、zip書庫内ではディレクトリって「これはディレクトリだよ」っていうデータ上のヘッダデータがあるだけで、ディレクトリというもの自体が保存されてるわけでない(そもそもそんなんできるものではない)で、解凍とか展開時にディレクトリを示すヘッダがあったらディレクトリを作成するっていう目印ていどのものなのですよね。
そんなかんじなのでアーカイバのコマンドラインから一括解凍してる場合はディレクトリの更新日時て簡単に取得できないんですよね。
出来ない事はないかもですが、一括解凍じゃなくて個別に解凍しながらチェックするとか、ディレクトリヘッダだけ検索してリストアップするとか……そもこれはzip書庫のフォーマットの話で他の書庫だとディレクトリの扱いどうなってるのかしらないのでアレですけど……。
一旦ディスクに書き出してから再圧縮の流れだと、一時フォルダのなかに展開するときに作成したディレクトリの日付になっちゃうのはまあ、それでいいかーとかおもっちゃったり。
ファイルの日付ならともかく、ディレクトリの日付とかあんま気にしなきゃいけないケースで無いような気もするし。
とかく統合アーカイバ系で細かい操作とかめんどくさいので一括解凍以外やりたくないというのが本音(ぉ
自前処理のzip→zipの場合はこのディレクトリアイテムもヘッダごとコピーなので更新日時は変更しなくても済むぽ。書庫内のデータをバイナリで右から左に移してるだけなので。
アーカイバもメモリ上に展開が出来ればこの辺クリアできそうなんですけど。実際にディスクに一旦書くからややこしいことに……。
とりあえずこれでついにunifyzip使わなくてもすむ形になったかな。zip以外→zip書庫の際におこなう冗長ディレクトリ除去とかフィルタリングとかも付けたし。
あとはちょっと悩んだのが件のQTemporaryDir
{
QTemporaryDir dir; // ここで一時ディレクトリ作成
if (dir.isValid()) {
// dir.path() returns the unique directory path
// なんかする
}
}// ここで一時ディレクトリの中身全部クリアされる
使い方的にはたったこれだけなんでとっても簡単。スコープ抜けたら削除というのはわかりやすくて良いですね。
実際にはシステムディレクトリのappなんとかのユーザー名/アプリ名のなかにさらにユニークな名前の一時フォルダがつくられるのですが、このユニークな名前ってのがどうやって取得しているのかと。
この手のは大抵は現在時刻を種にしたユニークな文字列を付加するのですがシステムのディレクトリでなく、一時フォルダの場所を自分で指定するようなものも欲しいなというところで(うちは違うのでアレだけどSSDとか使ってる場合は場所指定出来た方が良いだろうなーとおもたので)自分で似たようなのつくろうとおもうと、このユニークな文字のジェネレータだけどこかにない物かと思ったりで。
ttp://doc.qt.io/qt-5/qtemporarydir.html
でもQTemporaryDirのドキュメントみてみると
QTemporaryDir(const QString &templatePath)
これってまんま、ここにパスいれたらその直下にユニークな名前のディレクトリ作ってくれるコンストラクタなんじゃねーのと思うのですが、なにやら説明みるとちがうっぽい。英語なのでよくわからん。
実際に試してみると、引数のtemplatePathにユニークな文字が付加された文字列がdir.path()で返ってくるように。
templatePathという名前からして、どうもこれがユニークな文字のジェネレータっぽいんですが……。
static QString QTemporaryDir::templatePath(const QString &templatePath);
じゃあかんかったんかコレ……
コンストラクタで別の機能なかんじなので、ちょと時間おいて利用コード後から見たら、うん? ここで一時フォルダ作ってるっぽいけどすぐ閉じてて意味ないじゃん。スコープ抜けたら一時フォルダ消えちゃうんだし。
うっかりこんなコード書いたのかな。とりあえずunique_ptrに放り込んだコードに書き直すか……と半分ぐらい書いたところで、これユニークな文字のジェネレータだったわ……と気づいたりしたしw
そんな感じで結局今日もがっつりPGやってしまった……
でも今度こそ一段落ぽ……。
Sun
Mon
Tue
Wed
Thu
Fri
Sat
01
02
03
■
■
ずーんと
04
05
06
■
■
相変わらず横道人生
07
08
■
■
要らないぽ?
09
10
■
■
とりあえず切りの良いところで
11
[建国記念の日]
12
13
14
■
■
見つけちゃった物だから
15
16
17
18
19
20
21
22
23
24
25
26
■
■
予定構想妄想
27
28
■
■
いろいろ変わりまくってるぽ
total:2081144 t:118 y:488
■記事タイトル■
■年度別リスト■
2024年
2024年12月(0)2024年11月(0)
2024年10月(1)
2024年09月(2)
2024年08月(1)
2024年07月(1)
2024年06月(5)
2024年05月(2)
2024年04月(1)
2024年03月(6)
2024年02月(4)
2024年01月(3)
2023年
2023年12月(3)2023年11月(1)
2023年10月(2)
2023年09月(3)
2023年08月(3)
2023年07月(3)
2023年06月(7)
2023年05月(8)
2023年04月(2)
2023年03月(1)
2023年02月(2)
2023年01月(3)
2022年
2022年12月(4)2022年11月(3)
2022年10月(1)
2022年09月(3)
2022年08月(3)
2022年07月(2)
2022年06月(1)
2022年05月(3)
2022年04月(2)
2022年03月(2)
2022年02月(1)
2022年01月(6)
2021年
2021年12月(8)2021年11月(3)
2021年10月(4)
2021年09月(6)
2021年08月(2)
2021年07月(1)
2021年06月(3)
2021年05月(2)
2021年04月(2)
2021年03月(3)
2021年02月(1)
2021年01月(4)
2020年
2020年12月(3)2020年11月(7)
2020年10月(2)
2020年09月(3)
2020年08月(1)
2020年07月(3)
2020年06月(7)
2020年05月(5)
2020年04月(8)
2020年03月(4)
2020年02月(2)
2020年01月(4)
2019年
2019年12月(1)2019年11月(1)
2019年10月(2)
2019年09月(1)
2019年08月(3)
2019年07月(2)
2019年06月(2)
2019年05月(2)
2019年04月(4)
2019年03月(1)
2019年02月(7)
2019年01月(1)
2018年
2018年12月(1)2018年11月(1)
2018年10月(5)
2018年09月(1)
2018年08月(5)
2018年07月(1)
2018年06月(1)
2018年05月(1)
2018年04月(2)
2018年03月(2)
2018年02月(1)
2018年01月(1)
2017年
2017年12月(2)2017年11月(1)
2017年10月(2)
2017年09月(5)
2017年08月(8)
2017年07月(2)
2017年06月(1)
2017年05月(1)
2017年04月(3)
2017年03月(5)
2017年02月(7)
2017年01月(8)
2016年
2016年12月(7)2016年11月(2)
2016年10月(3)
2016年09月(7)
2016年08月(8)
2016年07月(10)
2016年06月(17)
2016年05月(6)
2016年04月(8)
2016年03月(10)
2016年02月(5)
2016年01月(10)
2015年
2015年12月(7)2015年11月(7)
2015年10月(13)
2015年09月(7)
2015年08月(7)
2015年07月(5)
2015年06月(4)
2015年05月(5)
2015年04月(2)
2015年03月(4)
2015年02月(1)
2015年01月(7)
2014年
2014年12月(12)2014年11月(8)
2014年10月(4)
2014年09月(6)
2014年08月(7)
2014年07月(4)
2014年06月(2)
2014年05月(5)
2014年04月(4)
2014年03月(8)
2014年02月(4)
2014年01月(8)
2013年
2013年12月(15)2013年11月(8)
2013年10月(3)
2013年09月(3)
2013年08月(8)
2013年07月(0)
2013年06月(0)
2013年05月(0)
2013年04月(0)
2013年03月(0)
2013年02月(0)
2013年01月(0)
■レス履歴■
■ファイル抽出■
■ワード検索■
堕天使の煉獄
https://rengoku.sakura.ne.jp
管理人
織田霧さくら(oda-x)
E-mail (■を@に)
oda-x■rengoku.sakura.ne.jp