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

У меня была странная ситуация, когда я пытался получить доступ к подкаталогам моего диска 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 ]

5 голосов
/ 09 сентября 2011

Я предполагаю, что он интерпретирует «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:\
5 голосов
/ 09 сентября 2011

\ является escape-символом.
\" вставляет символ " в строку без завершения строкового литерала (например, "I have a \"quoted\" word!")

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


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

...