ホーム >プログラム >Delphi 6 ローテクTips

Unicode対応DirectoryExists

Unicode対応DirectoryExits。

interface

function DirectoryExistsW(sFolder: WideString): Boolean;
function gfnbFolderExists(sFolder: WideString): Boolean;
function gfnbDirectoryExists(sFolder: WideString): Boolean;


implementation
uses
  Windows;
function DirectoryExistsW(sFolder: WideString): Boolean;
//Unicode対応DirectoryExits。
var
  li_Attr: DWORD;
begin
  li_Attr := GetFileAttributesW(PWideChar(sFolder));
  Result  := ((li_Attr <> $FFFFFFFF) and ((li_Attr and FILE_ATTRIBUTE_DIRECTORY) <> 0));
end;

ワイルドカード対応版。
通常ここまでする必要はない、、というかかえってややこしくなるかも知れない。

function gfnbFolderExists(sFolder: WideString): Boolean;
{
Unicode対応DirectoryExits。
ワイルドカード対応版。
}

var
  lh_Handle: THandle;
  lr_Info:   TWin32FindDataW;
  li_Len:    Integer;
begin
  Result  := False;

  if (sFolder <> '') then begin
    li_Len := Length(sFolder);
    if (sFolder[li_Len] = '\') then begin
      SetLength(sFolder, li_Len -1);
    end;
  end;

  FillChar(lr_Info, SizeOf(TWin32FindDataW), 0);
  lh_Handle:= FindFirstFileW(PWideChar(sFolder), lr_Info);
  try
    if (lh_Handle<> INVALID_HANDLE_VALUE) then begin
      repeat
        if  (WideString(lr_Info.cFileName) <> '.')
        and (WideString(lr_Info.cFileName) <> '..')
        and ((lr_Info.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0)
        then begin
          Result := True;
          Break;
        end;
      until not(FindNextFileW(lh_Handle, lr_Info));
    end;
  finally
    Windows.FindClose(lh_Handle);
  end;
end;

function gfnbDirectoryExists(sFolder: WideString): Boolean;
begin
  Result := gfnbFolderExists(sFolder);
end;