我有一个List<string>
包含文件路径。如何检查列表中是否有特定文件file.txt
?优选地,返回不是bool
值但是
列表
元素或元素的索引的方法。搜索列表<T>
我读过List<T>
文档,但它只是困惑我,因为我是一个程序员开始,我的英语不是很好。
我有一个List<string>
包含文件路径。如何检查列表中是否有特定文件file.txt
?优选地,返回不是bool
值但是
列表
元素或元素的索引的方法。搜索列表<T>
我读过List<T>
文档,但它只是困惑我,因为我是一个程序员开始,我的英语不是很好。
使用Where得到的值的列表:
var found = fileList.
Where((f)=>System.IO.Path.GetFileName(f)
.Equals(SEARCH_VALUE,
StringComparison.InvariantCultureIgnoreCase));
情况下或者在使用FirstOrDefault单一元素或null
它没有发现
使用LINQ(假设你havethe路径字符串):
var found = from f in fileList where f.equals("file.txt") select f;
这一个不会找到“File.txt”,你也混了f和n –
@SchlaWiener原因混合n和f或者其他原因? – CloudyMarble
我没有downvote - 这只是一个提示。 –
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;
会做。
错误。这也会找到“myfile.txt”! –
@SchlaWiener,正确,+1为你 – Jodrell
如果你只是想第一个值,如果有一个,那么你可以做到这一点。
var value = mylist.FirstOrDefault(x=>x.EndsWith("file.txt"));
或者如果你想对每个匹配的字符串做些什么。
foreach (string value in mylist.Where(x=>x.EndsWith("file.txt")))
{
// Do whatever you intend with value.
}
或者如果你想要一个值的索引列表,那么你可以试试这个。
var indexValues = new List<int>();
foreach (string value in mylist.Where(x=>x.EndsWith("file.txt")))
{
indexValues.Add(mylist.IndexOf(value));
}
如果您的列表包含完整路径(如C:\ WINDOWS \ SYSTEM.INI“),我会用System.IO.Path.GetFileName
,也记住搜索情况intenstive
var result = from f in files
where Path.GetFileName(f).Equals("file.txt",
StringComparison.InvariantCultureIgnoreCase)
select f;
bool found = result.Any();
这并不明朗你的问题,但似乎该列表将包含文件路径,但你正在寻找的是一个文件名。
下面的代码会给你一个名为“file.txt”文件的第一次出现的索引路径名列表,如果不在列表中,则为-1。
请注意如何使用Path.GetFileName()
。这是为了匹配“c:\ dir1 \ dir2 \ file.txt”而不是“c:\ dir1 \ dir2 \ wrongfile.txt”。
int index = filenames.FindIndex(filename => Path.GetFileName(filename).Equals("file.txt", StringComparison.OrdinalIgnoreCase));
不过,如果你正在寻找一个完整的路径,那么你可以做这样的:
int index = filenames.FindIndex(filename => filename.Equals("file.txt", StringComparison.OrdinalIgnoreCase));
注意我们如何做整个文件名的比较,而不是使用“的endsWith”。
如果文件名已经全部小写和你再比较完整的路径,你可以做一个简单的搜索:
int index = filenames.IndexOf("file.txt");
或者,如果他们都是大写的,你必须做:
int index = filenames.IndexOf("FILE.TXT");
考虑到您的路径和文件名位于路径末尾:
//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)));
可能的重复[Search list of基于对象变量的对象](http://stackoverflow.com/questions/3154310/search-list-of-objects-based-on-object-variable) – CodeCaster
list.Find(item => item.Contains(“file。文本”)); –