3

尝试访问我的 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:"返回当前目录而不是根目录"c:\"。但我没有收到任何困惑提到的错误。

4

2 回答 2

5

\是一个转义字符。
\"在字符串中插入一个"字符,而不终止字符串文字(例如,"I have a \"quoted\" word!"

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


C:不带a的路径\指的是C驱动器内的当前目录,不一定C:\每个驱动器都有自己的当前目录)。

于 2011-09-09T19:25:06.067 回答
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:\
于 2011-09-09T19:25:31.737 回答