Ответ 1
Этот API ведет себя корректно, но часто кажется неправильным в первый раз, когда вы сталкиваетесь с этим поведением. Опускание \
после буквы тома имеет специальную семантику. Он заменит спецификатор объема значением, переданным в последний вызов SetCurrentDirectory
для этого тома. Как это помнит, здесь обсуждается
В этом случае последнее переданное значение было либо c:\
, либо текущий каталог просто не был установлен. Следовательно, вызов фактически стал второй версией
Directory.Exists("c:\\temp\\foo")
Это правильно оценивается как true
Почему это происходит для Directory.Exists
- это глубоко, глубоко в функции, в которой он использует GetFullPathName, который полагается на это поведение (см. ссылку документация).