List<string>
含むファイルパスがあります。リストに特定のファイルがあるかどうかを確認するにはどうすればよいfile.txt
ですか? bool
できれば、値ではなくリスト要素または要素のインデックスを返すメソッド。
ドキュメントを読みましたList<T>
が、初心者プログラマーで英語があまり得意ではないので、混乱するだけでした。
List<string>
含むファイルパスがあります。リストに特定のファイルがあるかどうかを確認するにはどうすればよいfile.txt
ですか? bool
できれば、値ではなくリスト要素または要素のインデックスを返すメソッド。
ドキュメントを読みましたList<T>
が、初心者プログラマーで英語があまり得意ではないので、混乱するだけでした。
Whereを使用して値のリストを取得します。
var found = fileList.
Where((f)=>System.IO.Path.GetFileName(f)
.Equals(SEARCH_VALUE,
StringComparison.InvariantCultureIgnoreCase));
または、単一の要素に対して、または見つからない場合にFirstOrDefaultを使用しますnull
リストにフル パス (c:\windows\system.ini など) が含まれている場合は、System.IO.Path.GetFileName
大文字と小文字を区別して検索することを忘れずに使用します。
var result = from f in files
where Path.GetFileName(f).Equals("file.txt",
StringComparison.InvariantCultureIgnoreCase)
select f;
bool found = result.Any();
メソッドは、IndexOf
探しているものを正確に監視するパスを見つけたい場合に必要なものです。
ただし、特定のファイル名で終わるリスト内のパスを検索する場合は、次のことができます。
var matches = paths.Select((path, i) => new { Path = path, Index = i })
.Where(item => Path.GetFileName(item.Path).Equals(
"file.txt",
StringComparison.OrdinalIgnoreCase));
ただし、matches
0 個以上の一致のシーケンスになることに注意してください。だから、あなたができる、
if (matches.Any())
{
// I found something.
foreach (var match in matches)
{
var matchIndex = match.Index;
var matchPath = match.Path;
}
}
else
{
// Oops, no matches.
}
または、最初だけが必要な場合。
var firstMatchPath = matches.First().Path;
するでしょう。
LINQ を使用します (パスが文字列としてあると仮定します)。
var found = from f in fileList where f.equals("file.txt") select f;
パスがあり、ファイル名がパスの最後にあることを考慮すると、次のようになります。
//List of elements
List<string> foundElements = myInitialList.Where(s => s.EndsWith("file.txt")).ToList();
//List of Indexes (base on lift of elements here above)
List<int> indexList = new List<int>();
foundElements.ForEach(f => indexList.Add(myInitialList.IndexOf(f)));