FileExistsのマスク文字が、D2007で無効になる

解決


YUU  2008-02-22 18:12:40  No: 29876

D7で、以下のようにあるフォルダーに画像ファイルが無ければ
画像保守用のフォームを開かないようにする為に、FileExistsで  指定したファイル名にマスク文字を使用していました。
// 画像格納フォルダーに、画像データが全く無い場合  フォームを開かない
    if FileExists(DM1.gazou_dir + '\*.jpeg') or
       FileExists(DM1.gazou_dir + '\*.jpg') or
       FileExists(DM1.gazou_dir + '\*.gif') then begin
        F_Picter_mente := TF_Picter_mente.Create(Application);
        try
          (省略)

このソースをD2007へ持っていくと 画像ファイルが存在しても
Falseになってしまいます。(マスクが使えない?)
ファイルを全てチェックすれば良いのでしょうが、他に方法は無いでしょうか?


KHE00221  2008-02-22 21:19:20  No: 29877

D7 と D2007 をもっているのならば ソースを見比べてみよう!

D7 の FileExists は FileAge を使っています
(内部でFindFirstFileを使用している)

のでマスクが有効ですが

BDS2006 では GetFileAttributes を使用していますので

マスクは有効ではありません

D2007 も同様でしょう


KHE00221  2008-02-22 21:26:38  No: 29878

こんな感じな関数を作ればOKかな

function FileExists(Path:String):Boolean;
var
    SearchRec: TSearchRec;
begin
    Result := False;
    if FindFirst(Path,faAnyFile,SearchRec) = 0 then Result := True;
    if SearchRec.Attr and faDirectory = faDirectory then Result := False;
    if SearchRec.Attr and faVolumeID = faVolumeID then Result := False;
    FindClose(SearchRec);
end;

function DirecotryExists(Path:String):Boolean;
var
    SearchRec: TSearchRec;
begin
    Result := False;
    if FindFirst(Path,faAnyFile,SearchRec) = 0 then Result := True;
    if SearchRec.Attr and faDirectory <> faDirectory then Result := False;
    FindClose(SearchRec);
end;


YUU  2008-02-23 00:06:45  No: 29879

KHE00221さん  ありがとうございます。
ソース見てみました。
宝の持ち腐れと言うやつですね、猛反です。
サンプルソースまで提示いただきありがとうございました。
やりたいことができました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加