4


0

LINQ-各結果に静的テキストを追加

ファイルの配列はありますが、問題はルートパスがファイルに添付されていないことです。したがって、以下のデータを使用して、静的文字列にlinqアイテムを追加するにはどうすればよいでしょうか。

string rootPath = "C:\\Users\\MyUserName";

List files = new List();
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はファイルリストと同じです。

何か案は?

2 Answer


4


どうやら、2番目のパラメーターの先頭に「 \」がある場合、 Path.Combine`は最初のパラメーターを無視します(このhttp://coolthingoftheday.blogspot.com/2008/02/pathcombine-be-aware-of-slash-in -second.html [ブログエントリ]にはさらに情報があります)。

これは動作するはずです。Path.Combine`とhttp://msdn.microsoft.com/en-us/library/ty67wk28%28v=VS.100%29.aspx [?`演算子]を使用して先頭を説明します2番目のパラメーターのスラッシュ:

var fileList = (from f in files
                select Path.Combine(rootPath,
                f.StartsWith("\\") ? f.Substring(1) : f)).ToList();


0


変更するとクエリは正常に動作します

`" \\ My Documents \\ File1.txt "から@" My Documents \\ File1.txt "`へ。

理由は、ドーナツが言及した投稿に記載されています。

したがって、

string rootPath = "C:\\Users\\MyUserName";

List files = new List();
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 files = new List();
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));

お役に立てれば