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

私の推測では、「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 に答える
5

\エスケープ文字です。文字列リテラルを終了せずに、文字列に文字を
\"挿入します (例: )""I have a \"quoted\" word!"

リテラル文字列を使用します: @"C:\"; これらのリテラルはエスケープ文字を無視します。


C:のないパスは、ドライブ\内の現在のディレクトリを参照しますが、必ずしもそうとは限りません(各ドライブには独自の現在のディレクトリがあります)。 CC:\

于 2011-09-09T19:25:06.067 に答える