掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
フルパスを列挙について (ID:21917)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
これでよければ、どうぞ。 function EnumFilesIn( dir: string; keywords:TStrings; dest: TStrings):boolean; var path: string; sr: TSearchRec; attr: integer; i: integer; bl: boolean; begin { faReadOnly = $00000001; faHidden = $00000002; faSysFile = $00000004; faVolumeID = $00000008; faDirectory = $00000010; faArchive = $00000020; faAnyFile = $0000003F; } Result:=False; if not Assigned( dest) then Exit; if not Assigned( keywords) then Exit; attr:= faAnyfile or faDirectory; path:= IncludeTrailingBackSlash( dir); if FindFirst( path+'*.*',attr,sr)=0 then try repeat if (sr.Name<>'.') and (sr.Name<>'..') then begin if (sr.Attr and faDirectory)=faDirectory then begin bl:=EnumFilesIn( path+sr.Name, keywords, dest); Result:=Result or bl; end else begin if keywords.Count>0 then begin bl:=True; for i:=0 to keywords.Count-1 do begin bl:= bl and (pos( AnsiUpperCase(keywords[i]),AnsiUpperCase(path+sr.Name))>0); if not bl then break; end; if bl then dest.Add(path+sr.Name); end else begin dest.Add(path+sr.Name); end; Result:=Result or ((sr.Attr and (not faVolumeID))>0); end; end; until FindNext(sr)<>0; finally FindClose(sr); end; end; function EnumFilesIn( dir: string; //走査したいディレクトリ keywords:TStrings; //フルパスとの一致を試みるキーワード dest: TStrings //出力先のTStrings。TMemo.Linesとか。 ):boolean; //ファイルが見つかれば Trueを返す keywords,dest は、あらかじめインスタンスを作成しておくこと。 keywordsは、 "Program Files" だったり ".pas" だったり。 *.pas とは指定できないところが味噌。 再帰検索処理で c:\ とかやった日には結構時間かかる。 んで、マルチスレッド版がすでにあるので そちらのほうも、よろしければどうぞ。 私用のアプリケーション用に、最後のツメで機能の補完を目的に書いたもので ちょっと関係ない処理が入っているのですが、まあ使えると思います。 できたてホヤホヤだけど今のところ問題なし。 私は興味なくなるとバグを放置するタイプの人間なので、その辺の所よろしく。 ご利用は自己責任で。著作権とかは放置で。 http://www16.ocn.ne.jp/~fort_h/EnumFiles.zip においておきます。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.