Невозможно получить доступ к подкаталогам без '\' (обратная косая черта) в 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:\