1

这是代码:

t = Environment.GetEnvironmentVariable("UserProfile")+"\\documents";
string[] txtfiles = Directory.GetFiles(t, "*.txt",SearchOption.AllDirectories);
var textfiles = txtfiles.SelectMany(x => Directory.GetFiles(t, x));

我想从文档目录和所有子目录中获取所有文本文件。在我进行此更改之前,代码是:

string[] txtfiles = Directory.GetFiles(t, "*.txt",SearchOption.AllDirectories);

它奏效了。

但我做了这个改变,因为我想稍后获得目录大小和其他东西。问题是就行了:

var textfiles = txtfiles.SelectMany(x => Directory.GetFiles(t, x));

我得到了例外:

Second path fragment must not be a drive or UNC name

变量 t 包含:C:\Users\bout0_000\documents 变量 x 包含:C:\Users\bout0_000\documents\3DMark\3dmarkerror.txt

那么为什么在它工作之前和我在代码中所做的更改之后我得到一个异常?

4

2 回答 2

2

您似乎正在尝试使用Directory.GetFiles文件名而不是目录路径获取文件列表

我假设您想要包含文件的目录列表,因此您可以使用:

   var textfiles = txtfiles.Select(x => System.IO.Path.GetDirectoryName(x)).Distinct();
于 2013-08-09T00:34:58.520 回答
0

在你的

var textfiles = txtfiles.SelectMany(x => Directory.GetFiles(t, x));

x应该是类似的搜索模式,但*.txt您的x此处不是错误。

所以,你可以做你喜欢做的事

var textfiles = txtfiles.SelectMany(x => Directory.GetFiles(t, "*.txt", SearchOption.AllDirectories));

或者

var textfiles = txtfiles.SelectMany(x => Directory.GetFiles(t, "*.txt"));
于 2013-08-09T00:44:53.820 回答