在C#中没有'\'(反斜杠)访问子目录

faz*_*faz 3 c# path getdirectories drive

当我尝试访问我的c:驱动器的子目录时,我有一个奇怪的情况:

首先我尝试了以下代码,输出为0(零):

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

但是当路径(c :)添加'\'时,它显示了c:drive中子文件夹的确切数量.

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

但尝试了另一个驱动器(d :)像:

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

它检索所有子目录.

谁能解释为什么会这样?


谢谢你们.现在我明白了"c:"返回当前目录而不是root "c:\".但我没有得到任何错误,如所提到的那样.

SLa*_*aks 5

\是一个逃脱角色.在字符串中
\"插入一个"字符,而不终止字符串文字(例如"I have a \"quoted\" word!")

使用文字字符串:@"C:\"; 这些文字忽略转义字符.


C:没有a 的路径\指的是C驱动器中的当前目录,这不一定C:\(每个驱动器都有自己的当前目录).


Jas*_*son 5

我的猜测是它将"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:\
Run Code Online (Sandbox Code Playgroud)