这是代码:
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
那么为什么在它工作之前以及我在代码中所做的更改之后我会得到一个例外?
答案 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"));