我有一个文件数组,但问题是根路径没有附加到文件,所以使用下面的数据,我如何将linq项附加到静态字符串?
string rootPath = "C:\\Users\\MyUserName";
List<string> files = new List<string>();
files.Add("\\My Documents\\File1.txt");
files.Add("\\My Documents\\File2.txt");
我基本上想要一个Path.Combine(rootPath,x)列表;我试过这个但没有运气:
var fileList = (from x in files
select Path.Combine(rootPath, x)).ToList();
但它没有附加rootPath,fileList与文件列表相同。
有什么想法吗?
答案 0 :(得分:4)
如果第二个参数的前导“Path.Combine
”(blog entry有更多信息),显然\
会忽略第一个参数。
这应该有效,它使用Path.Combine
和?
operator来计算第二个参数中的前导斜杠:
var fileList = (from f in files
select Path.Combine(rootPath,
f.StartsWith("\\") ? f.Substring(1) : f)).ToList();
答案 1 :(得分:0)
如果更改
,查询可以正常工作 "\\My Documents\\File1.txt" to @"My Documents\\File1.txt"
。
这个原因在Donut提到的帖子中有所描述。
因此,
string rootPath = "C:\\Users\\MyUserName";
List<string> files = new List<string>();
files.Add(@"My Documents\\File1.txt");
files.Add(@"My Documents\\File2.txt");
var fileList = (from x in files select Path.Combine(rootPath, x)).ToList();
OR
var fileList = files.Select(i => Path.Combine(rootPath, i));
工作正常。
如果您根本不想更改现有的源,那么然后使用而不是Path.Combine string.Concat
e.g。
string rootPath = "C:\\Users\\MyUserName";
List<string> files = new List<string>();
files.Add("\\My Documents\\File1.txt");
files.Add("\\My Documents\\File2.txt");
var fileList = (from x in files select string.Concat(rootPath, x)).ToList();
OR
var fileList = files.Select(i => string.Concat(rootPath, i));
希望这有帮助