・「TotalSize0.2.2」を公開しました。2008/02/26 15:42

「木全屋かるた堂」WebPageの自作ソフトで「TotalSize0.2.2」を公開しました。

変更点は、

(1)Copyボタンでファイル情報を取得できるようにした。
(2)Copyボタンの設定を保存するようにした。

という感じで、ドロップされたファイルやフォルダのフルパスと容量をクリップボードに入れられるようにしました。

どうしてこの機能を追加することにしたかというと、DVD-RAMに入れたファイルを管理するためのリストを簡単に作成するためです。



例えば上記のような状態でCopyボタンを押すと、クリップボードには

 DVD\Piaキャロットへようこそ!!2_03/1.985668GB
 DVD\クレイモア_06(15-17)/4.257811GB

という2行の文字列が入ります。これをExcelの機能で"\"と"/"を区切り文字として分割すると、簡単に

 
A
B
C
1
DVD
Piaキャロットへようこそ!!2_03
1.985668GB
2
DVD
クレイモア_06(15-17)
4.257811GB

という表を作ることができます。

で、酢こんぶが実際にどんなリストを作っているかというと、

(1)DVD-RAMを入れている不織布ケースのインデックスに連番をつける。
(2)DVD-RAMにファイルを入れるとき、まず対応する連番のフォルダを作って、そこに入れる。
(3)入れたファイルをTotalSizeにドロップすると以下のような文字列が得られる。

 0001a\面白い動画/2.0GB
 0001a\宴会の写真フォルダ/0.8GB

(4)これをExcelにペーストしてマクロで分割すると、

 
A
B
C
1
0001a
面白い動画
2.0GB
2
0001a
宴会の写真フォルダ
0.8GB

という表ができるので、DVD-RAMごとにこの作業を繰り返せば必要なファイルをすぐに見つけることができるシステムが完成というわけです。

あと何に使うのかわかりにくいだろうなあ、と思うのが
「最初の'\'を'>'に置き換える」
という機能です。

これは連番の下でさらに分類をしたい場合に使います。

 0001a\動画\douga1.mpg/1.0GB
 0001a\動画\douga2.mpg/1.2GB
 0001a\写真\送別会写真/0.5GB
 0001a\写真\忘年会写真/0.2GB

というようなフォルダ階層にして、"動画"と"写真"の分類をしたい場合、

 
A
B
C
1
0001a
動画\douga1.mpg
1.0GB
2
0001a
動画\douga2.mpg
1.2GB
3
0001a
写真\送別会写真
0.5GB
4
0001a
写真\忘年会写真
0.2GB

という表が欲しいのに、"\"で分割してしまうと

 
A
B
C

D

1
0001a
動画
douga1.mpg
1.0GB
2
0001a
動画
douga2.mpg
1.2GB
3
0001a
写真
送別会写真
0.5GB
4
0001a
写真
忘年会写真
0.2GB

というように列数が変わってしまって面倒なので

 0001a>動画\douga1.mpg/1.0GB
 0001a>動画\douga2.mpg/1.2GB
 0001a>写真\送別会写真/0.5GB
 0001a>写真\忘年会写真/0.2GB

という文字列を出力して、">"と"/"で分割することにしたというわけです。

すごく長々と説明してきましたけど、ここまでたどり着いた人はどれくらいいるんでしょうね。(^_^;

とりあえず酢こんぶは非常に重宝していますので、興味があったら使ってみてください。そして感想やら不満やら教えていただけると嬉しいです。

------------------------------------------
このブログの本店「木全屋かるた堂」もよろしくです。

・ファーストガンダムのかるた売ってます。
・ファイル整理に便利な自作ツール置いてます。
・写真(コスプレ、ポートレート、動物)公開してます。
------------------------------------------

・「ひとまとめ」は完成かと思ったら全然そうじゃなかった、、、2007/12/13 18:12

長年の懸案事項だった「ひとまとめ」の無反応になる問題が解決されて、もう改良するとこなんかないよなあ、、、と思っていたのに、新版を使っているとどんどん不満な点が見えてきた。

その1 CRC32の計算がキャンセルできない

「ひとまとめ」ではファイル名とファイルサイズが同じ二つのファイルの同一性を検査するためにCRC32を使っているのだが、100MB以上のファイルサイズになると結構時間がかかる。こういうファイルサイズで、自分の意図しない時にCRC32計算に入ってしまうとキャンセルしたくなるのだが、これができない。コピーや移動の時にはキャンセルできるのにCRC32計算中にできないのは片手落ちなので、少し頑張って実装済み。

その2 CRC32の計算可能サイズが空きメモリに依存する

CRC32の計算にはネットで拾ってきたルーチンを使っているのだが、これがファイルをすべてメモリに取り込む仕様になっている。つまり空きメモリ容量を超えるサイズのファイルは計算不可能。いまどき1GBを超えるファイルなんてゴロゴロしているので、こういうファイルのCRC32計算には空きメモリ1GB以上が要求されるが、32BitのWindowsを使っていて、常に1GB以上の空きメモリがある人は少ないだろうなあ、、、。ということでこれも頑張って、2GBまでなら計算できるようにした。2GBというのはVB6の制約なので如何ともしがたく、解決するためにDelphiでdllを作ることを検討中。

その3 UNICODEに対応していない

UNICODEというのは、英語とかドイツ語とか中国語とか韓国語とか日本語とかアラビア語とか、世界中にあるいろんな文字をひとつのコード(UNICODE)で全てあらわせるようにしようというもので、出はじめの頃はいろいろ問題があったようだが最近は主要なOSでサポートされるようになり、それなりの地位を確立している。WindowsもNT以降はUNICODEに対応しているのだが、VB6が対応していない。じゃあDelphiに移植して、、、と思ったらDelphiも対応していないのだ。ということは酢こんぶの開発環境ではお手上げだし、日本語だけを使っている分には問題は起こらないので、今のところ放置してある。
「だって日本語以外使わないから問題ないじゃん」と思うかもしれないが、そうでもない。中国系の人が共有しているファイルをダウンロードしたら、そのファイル名に中国特有の漢字が使われていて、エクスプローラでは表示されるのに「ひとまとめ」では処理できないという現象が起こり、さらに「ひとまとめ」のバグでファイルが消えてしまったのだ。すぐ気づいたので再度ダウンロードしたが、二度と取り戻せないファイルだったらと考えるとぞっとする。そんなことのないように、きちんと対応したいんだけどねえ、、、、。


ま、とりあえず1と2には対応できたのでしばらくこの状態で使って、安定していると判断した時点で公開ということでひとつ。

------------------------------------------
このブログの本店「木全屋かるた堂」もよろしくです。

・ファーストガンダムのかるた売ってます。
・ファイル整理に便利な自作ツール置いてます。
・写真(コスプレ、ポートレート、動物)公開してます。
------------------------------------------

・CopyFileExをDelphiで使うときのサンプルを作ってみた2007/10/26 16:05

前に書いたように、酢こんぶ自作のツール「ひとまとめ」にCopyFileExを使うことで、大きなファイルをコピーしているときに無反応になってしまう問題とコピー動作をキャンセルできないという問題を解決することができた。

但しこれはVisualBasic6での話で、これからメインの開発言語にしようと思っているDelphiでCopyFileExを使えるようになったわけではない。まあ使い方はわかったんだからDelphiでも簡単に使えるだろうと思ったらこれが甘かった。

VB6と同じようにコードを書くと文法エラーでコンパイルすらできない。なぜエラーになるのかはっきりしないまま、試行錯誤してなんとか実行できるようになったが、コピーの途中でキャンセルボタンを押すと例外(つまり実行時エラー)が発生して正常動作しない。

ポインタの処理がまずいことは薄々わかっていたのでそのあたりを勉強しなおしてなんとか動くものができたのだが、この作業をしているときに思ったのが、
「実際に動作するサンプルがあればなあ、、、」
ということだ。

ネットにはDelphiの実動サンプルがたくさんあるのだが、CopyFileExを使ったものは見つからないし、サンプルコードもあまりないので結構苦労した。で、これからDelphiを使う人はそんな苦労をする必要もなかろうということで、実動サンプルを公開することにした。

サンプルファイルはここ
  ↓
CopyFileExサンプル

動作説明:
(1)Startボタンを押してコピー元とコピー先を決めるとコピー開始。
(2)Cancelボタンでコピー動作のキャンセルができる。

注意事項:
(a)動作はTurboDelphiExplorer+Win2000環境のみで確認
(b)これを使って何かあっても酢こんぶは責任を取らない
(c)何に使ってもOKで使用許可も必要なし
(d)気が向いたら、使ってるよ連絡をしてくれるとうれしい

ということでよろしくお願いします。

あと、ファイルの保存先をデスクトップにすると、キャンセルボタンを押したあとの処理にものすごく時間がかかるという現象が酢こんぶの環境で起きているのだが、原因がよくわかんないので放置してあるます。(^_^;

----11/15追記--------
コピーするファイルサイズが0byteのとき(実際にはいくらかのディスクスペースを消費してるはずだけど中身のないファイルは0byteということになる)、 CopyProgressRoutineの~%complete計算で0除算エラーが出るので、このときだけ別処理にするとかしてください。
----追記ここまで-------

------------------------------------------
このブログの本店「木全屋かるた堂」もよろしくです。

・ファーストガンダムのかるた売ってます。
・ファイル整理に便利な自作ツール置いてます。
・写真(コスプレ、ポートレート、動物)公開してます。
------------------------------------------

・「TotalSize」を「木全屋かるた堂」で公開しました2007/10/18 16:44

10/12のブログに書いた、ファイル/フォルダの容量を合計するツール「TotalSize」を「木全屋かるた堂」のページで公開しました。

酢こんぶ以外には需要がないと思っていたので公開していませんでしたが、Delphiで初めて作ったツールだし、他に似たようなツールもないしということで公開することにしました。

下記のページの下のほうに置いてありますので、興味のある方はダウンロードして使ってみてください。よろしければ使ってみた感想などいただけるとありがたいです。m(_'_)m

酢こんぶの自作ソフトのページ

----TotalSize-------------------------------------------
 ファイル/フォルダの合計容量を調べるツールです。
 (Windows用フリーウェア)

 (1) ドロップしたファイル/フォルダの合計容量を表示します。
 (2) 任意のファイル/フォルダの組み合わせで合計容量がどうなるかを
  調べることができます。
--------------------------------------------------------

ちなみに(2)の機能は、たくさんのファイル/フォルダをDVD-RAMなどの外部メディアに保存するとき「できるだけメディアの容量を無駄にしないフォルダの組み合わせはどれか」という検討をする時便利です。(多分^_^;)

ところで10/12のブログで、Delphi版がVB6版に比べて3倍遅いと書きましたが、遅いのは自分のせいでした。orz

ファイルリストを表示する部分にファイルを追加するとき、

ファイルサイズ表示->ファイルパス表示->チェックボックスON
(以下ファイル数の分だけ繰り返し)


というルーチンになっているのですが、表示部が変更されるたびにファイルサイズの合計を表示するようになっていたので、実際は

ファイルサイズ表示->サイズ合計計算
 ->ファイルパス表示->サイズ合計計算
 ->チェックボックスON->サイズ合計計算
(以下ファイル数の分だけ繰り返し)


というように、無駄な計算をしていました。これを修正したらかなり速くなって、VB6と同等から2倍程度の実行時間になりました。でもやっぱり差があるところをみると、VB6は特別なことをしてるんだろうなあ、、、。


ところで今回思ったのはイベントドリブンのプログラムはやっかいだということです。上から下に流れていくだけのプログラムなら実行時に何が起こるのかがわかりやすいのですが、イベントドリブンの場合は実行してみないと何が起こるかわかりません。今回の無駄な計算をしていた件も、別の目的でステップ実行していたときに初めて気がつきました。

こんな300行に満たないプログラムでさえ少し考えただけでは気がつかない問題点が潜んでいるんだから、複数人で開発している数十万ステップのプログラムに全くバグがないなんてありえないよなあ、、、なんて思ったり思わなかったり、、、、。

------------------------------------------
このブログの本店「木全屋かるた堂」もよろしくです。

・ファーストガンダムのかるた売ってます。
・ファイル整理に便利な自作ツール置いてます。
・写真(コスプレ、ポートレート、動物)公開してます。
------------------------------------------

・Delphiでファイル/フォルダ容量を合計するツールを作ってみた2007/10/12 20:03

ここしばらくDelphiでプログラムを作る練習をしていたのだが、そろそろツールを作ってみるかということで、VB6で作ったツールをDelphで作り直してみることにした。

そのツールというのは「TotalSize」という名前で、ドロップしたファイルやフォルダの容量を合計して表示するという簡単なものだ。世の中にはフォルダ容量表示をExplorerに付加するツールなどもあるのだが、容量合計を知るには結局プロパティを表示しなければならなかったりするのでまどろっこしい。あと、いろんなフォルダをDVD-RAMに保存するとき、DVD-RAMに収まる任意のフォルダの組み合わせとかを探したいのだけれど、そんな機能を持ったツールはない。しょうがないので自分で作ってみたのだが、酢こんぶ以外に需要はないかと思ったので公開はしていない。

というようなツールをDelphiで作り直してみてわかったのは、VB6とDelphiとで一長一短だなあということ。

Delphi版の短所

1)遅い!(^_^;

状況によるが、VB6版の3倍くらい遅い。原因はわかっていて、VB6ではフォルダ容量をひとつのコマンドで取得できるのだが、Delphiにはそういうコマンドはないので、フォルダ階層をたどりながらファイル容量を順次計算していくしかない。Windowsの情報がいくらでも入手できるVB6開発チームは最速でフォルダ容量を取得する方法(キャッシュを見に行くとか)を知っているのでちまちま計算するよりずっと速い、、、のではないかと予想。ということはDelphi版がスピードで勝てるわけないので解決策無し。orz

2)でかい!(^_^;

VB6版はEXEファイルの容量が30KB以下。かたやDelphi版は500KB強という圧倒的なでかさ。Delphi版がランタイムライブラリなしに動作することを考えればしかたないのかもしれないが、、、、、。

Delphi版の長所

a)ファイルドロップ時にExplorerをフックしない。

VB6版ではツールにファイルをドロップすることで処理を開始させると、その処理が終了するまで、ファイルをドラッグしたExplorerをフックして無反応にさせてしまう。これでは使い勝手が悪いので、ファイルドロップ後に実行ボタンを押すという操作にしているのだがやはりまどろっこしい。これがDelphi版ではExplorerをフックしないので余分な処理をする必要がない。

b)途中でキャンセルができる。

VB6版はワンコマンドでフォルダ容量を取得するので、容量を取得するのに時間がかかるフォルダ(階層が深かったりファイル数が多かったりするフォルダ)の処理を途中で止めようと思ってもできないし、ツール自体が無反応になってしまう。Delphi版は自分でルーチンを書いているので、遅いという欠点はあるもののいつでもキャンセルできるし、無反応になることもない。


ということなのだが、酢こんぶ的にはDelphi版のメリットはデメリットを圧倒的に上回っているのでDelphi版を使っていこうと思う。

最初Delphiを使い始めたときは、その厳格な言語仕様が使いにくいと思わなかったでもないのだが、いいかげんなプログラムでもなんとか動くものを作れてしまうVB6に比べて、自分自身のスキルを自然に高めることができるという点で、Delphiがだんだん好きになっていく気がする。

------------------------------------------
このブログの本店「木全屋かるた堂」もよろしくです。

・ファーストガンダムのかるた売ってます。
・ファイル整理に便利な自作ツール置いてます。
・写真(コスプレ、ポートレート、動物)公開してます。
------------------------------------------