Подтвердить что ты не робот

DirectoryExists ( "c: temp\\foo" ) возвращает true, если каталог не существует!

Хорошо, я немного пошутил тем, что кажется странным. Я понимаю, что моя ошибка не правильно форматировать путь, но я ожидал бы, что следующий тест вернет false, тем более, что папка не существует.

DirectoryExists("C:temp\\foo")

но на самом деле он возвращает true, даже если каталог не существует!

Код должен быть

DirectoryExists("C:\\temp\\foo")

Может кто-нибудь объяснить мне, почему я получаю ложный результат от первой версии? Я ожидал бы, что он вернет false или может вызвать исключение, но не вернет true.

4b9b3361

Ответ 1

Этот API ведет себя корректно, но часто кажется неправильным в первый раз, когда вы сталкиваетесь с этим поведением. Опускание \ после буквы тома имеет специальную семантику. Он заменит спецификатор объема значением, переданным в последний вызов SetCurrentDirectory для этого тома. Как это помнит, здесь обсуждается

В этом случае последнее переданное значение было либо c:\, либо текущий каталог просто не был установлен. Следовательно, вызов фактически стал второй версией

Directory.Exists("c:\\temp\\foo")

Это правильно оценивается как true

Почему это происходит для Directory.Exists - это глубоко, глубоко в функции, в которой он использует GetFullPathName, который полагается на это поведение (см. ссылку документация).