Невозможно получить доступ к подкаталогам без '\' (обратная косая черта) в C#

У меня была странная ситуация, когда я пытался получить доступ к подкаталогам моего диска c:

сначала я попробовал следующий код, вывод был 0 (ноль):

MessageBox.Show(new DirectoryInfo("c:").GetDirectories().Length.ToString());

но при добавлении '\' к пути (c:), он показал точное количество вложенных папок на диске c:.

MessageBox.Show(new DirectoryInfo("c:\\").GetDirectories().Length.ToString());

но попробовал другой диск (d:) вроде:

MessageBox.Show(new DirectoryInfo("d:").GetDirectories().Length.ToString());

он получает все подкатегории.

Кто-нибудь может объяснить, почему это произошло?


Ну, спасибо, ребята. Теперь я понял, что "c:" возвращает текущий каталог, а не root "c: \". Но я не получаю никаких ошибок, как упомянуто смущение.

2 ответа

\ это побег персонаж
\" вставляет " символ в строке, без окончания строкового литерала (например, "I have a \"quoted\" word!")

Используйте буквенную строку: @"C:\"; эти литералы игнорируют escape-символы.


Путь C: без \ ссылается на текущий каталог в C диск, который не обязательно C:\ ( каждый диск имеет свой текущий каталог).

Я предполагаю, что он интерпретирует "c:" как текущую папку окружения на диске c: без подпапок. Но когда вы указываете диск, отличный от того, на котором он выполняется ("d:"), по умолчанию он становится корнем этого диска.

Это должна быть достаточно простая проверка - сравните полный путь DirectoryInfo("c:") и DirectoryInfo("c:\")

Console.WriteLine(new System.IO.DirectoryInfo(@"c:").FullName);

>> c:\project\test\bin\debug

Console.WriteLine(new System.IO.DirectoryInfo(@"c:\").FullName);

>> c:\
Другие вопросы по тегам