为什么我会收到ArgumentException?

时间:2013-08-09 00:27:11

标签: c# winforms

这是代码:

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

那么为什么在它工作之前以及我在代码中所做的更改之后我会得到一个例外?

2 个答案:

答案 0 :(得分:2)

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

我假设你想要一个包含这些文件的directorys列表,所以你可以使用:

   var textfiles = txtfiles.Select(x => System.IO.Path.GetDirectoryName(x)).Distinct();

答案 1 :(得分: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"));