|
▼ON さん:
>最初のコードで希望の操作かないました。
>そのうち、修正コードを頂いたので
>試してみたのですが、初回は別にしても
>次回以降は
>当初コード
> 532ミリ秒
> 610ミリ秒
>高速化コード
> 985ミリ秒
> 984ミリ秒
>となり、
いやー、申し訳ない。完全にぼくの <早とちり> でした。
> fDATA.dwFileAttributes = fATTR_DIRECTORY
で、DIRECTORY属性だけ与えておけば、フォルダだけ列挙できるかと早合点
してました。
実際は、こうしても、すべてのファイルがヒットしてしまうんですね Orz
Office TANAKA - Excel VBA(Dir関数でサブフォルダを取得する)
h t t p://officetanaka.net/excel/vba/tips/tips95.htm
にもあるように、
Dir関数の 第二引数ファイル属性は
定数 値 内容
vbNormal 0 標準ファイル
vbReadOnly 1 読み取り専用ファイル
vbHidden 2 隠しファイル
vbSystem 4 システムファイル(Macintoshでは使用できません)
vbVolume 8 ボリュームラベル(Macintoshでは使用できません)
vbDirectory 16 フォルダ
vbAlias 64 エイリアスファイル(Macintoshでのみ使用できます)
と、定数「標準ファイル」の値が 0 なので、フォルダだけの検索ができない。
しかし、
FildFirstFileのFILE_ATTRIBUTEは、
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_DIRECTORY = &H10
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_ATTRIBUTE_TEMPORARY = &H100
とあるように、Normalが &h80 で 0 でないので、
> FILE_ATTRIBUTE_DIRECTORY = &H10
だけを指定すれば、フォルダだけ検索できるかと思いこんでいました。
同じようなAPI関数に、
FindFirstFileEx というのがあるので、ひょっとしたら、これだと
属性でフィルタかけて検索できるのかな? と思ったりしたのですが、
これについての説明が Web にはあまり転がっていないようで、
トライできてません。
どなたか、
「サブフォルダだけの検索」ができるAPIをご存じありませんか?
いずれにしても、「高速版」は 2重に検索してるから、
最初のバージョンよりずっと「低速」です。
ごめんなさい。
|
|