System.IO.Directory.Exists не работает должным образом - PullRequest
0 голосов
/ 29 августа 2018

Когда строка "D: \ test \ ..." передается методу System.IO.Directory.Exists, она возвращает True на моем компьютере. Я проверил следующий код:

public static void Main(string[] args)
{
    if (Directory.Exists("D:\\test\\..."))
        Console.WriteLine("Directory exist.");  //Control gets here
    else
        Console.WriteLine("Does not exist.");
}

Это происходит, даже если в указанном месте не существует каталога с именем "..." (тройные точки).

Дальнейшее изучение этого вопроса показывает, что каким-то образом внутренне он проверяет только «D:», полностью игнорируя последнюю часть строки. Поскольку родительский каталог существует, он возвращает true.

Я хочу знать, есть ли способ проверить, не обрезая конечные точки?

Существуют ли такие сценарии, в которых результат метода Directory.Exists может отличаться от ожидаемого?

Обновление: Если я введу ту же строку «D: \ test \ ...» в адресную строку проводника Windows и нажму клавишу ввода, она сможет определить, что не может найти такой каталог. Есть ли способ получить подобное поведение?

Примечание: я знаю, что каталог с таким именем не может существовать, но я получаю строку ввода от пользователя, поэтому ввод в этот метод может быть любым.

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Потому что вы снова идете на диск "D: \".

Выражение escape-символа "D: \ test \ ..." означает диск с именем "D", и он там.

Если вы измените букву диска. Вы получите «Не существует». Вот ваш ответ.

D: \ -> D: \ test -> .. comand и собирается D: \ снова.

и вы не можете создать папку с именем "...". Вы получите ошибку «Параметр неверен».

0 голосов
/ 29 августа 2018

Я думаю, что это поведение Win32.

Фактически, если я создаю папку с именем ... с помощью команды ниже (создание папки обычным способом не позволяет):

mkdir \\?\c:\...

Папка ... сама перенаправляется в C: \. Поэтому я думаю, что папка ... представляет текущую папку (в данном случае C: \), и она существует всегда.

...