1

List<string>含むファイルパスがあります。リストに特定のファイルがあるかどうかを確認するにはどうすればよいfile.txtですか? boolできれば、値ではなくリスト要素または要素のインデックスを返すメソッド。

ドキュメントを読みましたList<T>が、初心者プログラマーで英語があまり得意ではないので、混乱するだけでした。

4

7 に答える 7

8

Whereを使用して値のリストを取得します。

      var found = fileList.
            Where((f)=>System.IO.Path.GetFileName(f)
                                  .Equals(SEARCH_VALUE, 
                                   StringComparison.InvariantCultureIgnoreCase)); 

または、単一の要素に対して、または見つからない場合にFirstOrDefaultを使用しますnull

于 2013-06-27T10:55:38.603 に答える
2

リストにフル パス (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();
于 2013-06-27T11:01:28.507 に答える
2

メソッドは、IndexOf探しているものを正確に監視するパスを見つけたい場合に必要なものです。

ただし、特定のファイル名で終わるリスト内のパスを検索する場合は、次のことができます。

var matches = paths.Select((path, i) => new { Path = path, Index = i })
    .Where(item => Path.GetFileName(item.Path).Equals(
        "file.txt",
        StringComparison.OrdinalIgnoreCase));

ただし、matches0 個以上の一致のシーケンスになることに注意してください。だから、あなたができる、

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;

するでしょう。

于 2013-06-27T10:57:34.550 に答える
1

LINQ を使用します (パスが文字列としてあると仮定します)。

var found = from f in fileList where f.equals("file.txt") select f; 
于 2013-06-27T10:55:40.630 に答える
0

パスがあり、ファイル名がパスの最後にあることを考慮すると、次のようになります。

        //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)));
于 2013-06-27T11:09:53.203 に答える