existfile関数の返値についてNo.06501
yanada さん 11/01/08 19:45
 
いつもお世話になっております。

existfile関数でディレクトリの存在検査を行っているのですが、幾つか気になる点
があります、ご確認をお願いできませんでしょうか。

  existfile("c:\\",0x00000010) -> false
  existfile("c:\\windows\\..",0x00000010) -> false
  existfile("c:\\windows\\system32",0x00000010) -> true
  existfile("c:\\windows\\system32\..",0x00000010) -> true

上記例からディレクトリがルートディレクトリを指すと間違った結果を返すようです。
もちろん、Cドライブは存在しています。

existfile関数が最終的にWindowsのどのAPIを呼び出しているのか分かりませんが、S
hell-API の PathIsDirectory関数ですと、上記例はすべて正しく検査できています。
(VC2010で確認しました)

よろしくお願いいたします

[ ]
RE:06501 existfile関数の返値についてNo.06504
秀丸担当 さん 11/01/11 11:22
 

報告ありがとうございます。
existfileの使い方としては、基本的にはファイルの存在チェックで、第二パラ
メータに1を指定したときはファイルの属性を返すということになっています。

if( existfile($filename) ) {
  if( (existfile($filename,1) & 0x00000010) != 0 ) {
    message "ファイルはディレクトリ";
  } else {
    message "ファイルはディレクトリでない";
  }
} else {
  message "ファイルではない";
}

返す値は、FindFirstFileのdwFileAttributesそのままでした。
ルートの場合は、ファイルではない扱いになるようで、そのファイルの属性も無
いということになってしまうようです。
PathIsDirectory相当ということになると、existfileに別のパラメータを新設し
ないといけないかもしれません。

現状では、
existfile("C:\\*.*")
とした場合は回避できたので、この方法が使えるかもしれないです。

[ ]
RE:06504 existfile関数の返値についてNo.06506
yanada さん 11/01/12 00:09
 
検査したい、パスの末尾に *.* を追加して回避してみます。
ディレクトリの存在検査を行うときがあるので、対応を行って頂けると助かります。
よろしくお願いいたします。

[ ]