2016-06-17 2 views
0

私はこのコードの動作に困惑しています。GetFileAttributesが無効な入力のためにFILE_ATTRIBUTE_DIRECTORYを返します

const char* file_name = "/ /"; 
auto attributes = GetFileAttributes(TEXT(file_name)); // same result without TEXT macro 
if (attributes == INVALID_FILE_ATTRIBUTES) 
{ 
    //error 
} 
else if (attributes == FILE_ATTRIBUTE_DIRECTORY) 
{ 
    //directory 
}  

これは、ファイルまたはディレクトリの無効な名前ですので、私は、これはINVALID_FILE_ATTRIBUTESを返すことを期待します。 win20で動作するVS2015でコンパイルされます。 これはフォワードチャーのためでしょうか?そして、入力を検証するwinAPI関数がありますか?

おかげ

+0

私のために '-1'を返します(失敗)。 –

+0

ANSIまたはUnicode? TEXTマクロを使用する理由はありますか?確かにUnicodeに固執することができます。 –

+0

* "これはファイルまたはディレクトリの無効な名前です" * - なぜですか?私にとって完全に有効なディレクトリ名のように見えます。 – IInspectable

答えて

4

"/ /"は完全に有効なファイル名です。スラッシュ/は、パス区切り文字として解釈されます。

したがって、システムを信頼することを前提として、このコードを実行するマシン上の現在の作業ボリュームのルートレベルに" "という名前のディレクトリがあります。

+0

言い換えれば、Occamのカミソリを適用してください。 –

+0

ああ、実際には、スラッシュがパス区切り文字として解釈されていた部分を見逃しました。 (そして私の他のテストでは、スペースを含むディレクトリが作成されています)。ご協力いただきありがとうございます! – Tadzys

関連する問題