2016-07-11 2 views
1

通常、GetFileAttributesW(L"C:")0x10FILE_ATTRIBUTE_DIRECTORY)ですが、これは妥当です。いくつかの場合にはなぜGetFileAttributesW(L "C:")はFILE_ATTRIBUTE_REPARSE_POINTを返しますか?

GetFileAttributesW(L"C:")は、私はそれが起こるとどのようにそれを取り除くために作るのだろうか0x2416FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT | FILE_ATTRIBUTE_NOT_CONTENT_INDEXED

を返します。この問題により、boost::filesystem::canonicalは動作しません。あなたは何か考えていますか?

+0

それは私には完全に合理的です。なぜあなたはGetFileAttributesWに欠陥があると思いますか? –

+2

'C:'は 'C:\\'と同じではありません。これは現在の作業ディレクトリであり、プログラムに応じて変更される可能性があります。 –

+0

@RichardCritten "C:"は "現在の作業ディレクトリ"を表しています。これは私の元の考えとは非常に異なっています。それを証明する何かを私に与えることができますか? –

答えて

7

ここでの主な混乱は、C:の意味です。これは、Cドライブ上の現在のディレクトリであると解釈されます。これはMSDN:Naming Files, Paths, and Namespacesで説明されています。

ファイル名はコロンの後にのみディスク指名ではなく バックスラッシュで始まる場合は、指定された文字とドライブ上の カレントディレクトリからの相対パスとして解釈されます。 現在のディレクトリは、そのディスク上の最新の "ディレクトリの変更" 操作中に設定されていたディレクトリの に応じて、ルートディレクトリである場合とそうでない場合があります。次のようにこのフォーマットの例は以下のとおりです。

  • 「C:tmp.txt」は:TEMPDIR \ tmp.txtドライブC上のカレントディレクトリに「tmp.txt」という名前のファイル
  • 「Cを指し、 「

ドライブCに現在のディレクトリにサブディレクトリ内のファイルを参照するのでGetFileAttributesW(L"C:")によって返される値は、現在のディレクトリが何であるかに依存します。私はあなたがGetFileAttributesW(L"C:\\")を使用する必要がある場合は、ルートフォルダの属性を取得しようとしていると信じています。

関連する問題