2016年10月31日月曜日

FindFirstFile にルートパスを指定した場合の挙動について

FindFirstFile(FindFirstFileEx) 関数の lpFileName にルートパスは指定できません。
MSDN でそのように記載されています。
FindFirstFile 関数
FindFirstFile の lpFileName パラメータでは、最後に円記号(\)を付けるかどうかにかかわりなく、ルートディレクトリを指定することはできません。




指定できないのはわかりましたが、実際に指定してしまった場合にどうなるのか検証したところ、厄介な挙動だったので備忘録として残しておきます。

検証にしようしたコードはこちら。



これを実行するとこのような出力になります。

カレントディレクトリがルートパスでない場合

このように INVALID_HANDLE ではなく Find が成功し、しかもなぜかカレントディレクトリ名が取得できます。


これが、カレントディレクトリがルートパスだった場合

期待?通り INVALID_HANDLE が返ります。


ちなみに、FindFirstFileExTest がコメントアウトされていますが、FindFirstFileEx でも同じ挙動を示しました。
(Windows 10 HOME version 1607 build 14393.321)
古い OS での検証はできていないので、もしかしたら挙動が異なるかもしれません。

0 件のコメント:

コメントを投稿