いつもお世話になっています。クリップです。
今回はFindFirst関数でワイルドカードを使用して、ファイルの検索をしようとしているんですが、
procedure TForm1.Button1Click(Sender: TObject);
var
Sr:TSearchRec;
FilterStr:string;
begin
Memo1.Clear;
FilterStr:= '*1*';
if FindFirst('E:\Test\' + FilterStr + '.*', faAnyFile, Sr)=0 then
begin
repeat
if (Sr.Attr and faDirectory)=0 then
Memo1.Lines.Add(Sr.Name);
until FindNext(Sr)>0;
end;
FindClose(Sr);
end;
とすると、FilterStrを上記のソースのように('*1*')すると
すべてのファイルを拾ってしまいます。他の数値では問題ありません。
また、
FilterStr:= '*1' とか
FilterStr:= '1*' だとちゃんと条件に合ったものを拾ってくれます。
なにとぞ、よろしくお願いします。
http://homepage3.nifty.com/m-and-i/tips/wildmatch.htm
が参考になるかもしれません。
ファイル名をMasksユニットのMatchesMask関数でチェックすればいいと思います。
スミマセン撤回します。
2バイト文字に対応していないので改良する必要があるのと、
パッケージによっては存在しない関数のようです。
(Delphi5 Professional には存在しています)
追加です。
MatchesMask関数の他にもShlwapi.dllに
PathMatchSpec というAPIが存在します。
こちらもOSの環境に依存するのですが、
MSDNを見る限りではIE4以降なら問題ないかと...
ボードさん Basserさん レスありがとうございます。
やはりFindFirst関数だけでは、無理みたいですね。
ためしの API のFindFirstFileでもやってみたんですけどダメでした。
Basserさんはいろいろと調べていただいてどうもです。
PathMatchSpecでいってみようと思います。
本当にどうもありがとうございました。
>やはりFindFirst関数だけでは、無理みたいですね。
>ためしの API のFindFirstFileでもやってみたんですけどダメでした。
Windowsのファイル検索でも同じ結果になりましたよ(^^;)
Windows 98SEです。
ツイート | ![]() |