我正在尝试检查字符串是否在数组中,即使fileInfo.Name。包含文件中的字符串也可以继续。
\\FILES LIKE DATABASE.MDB IS IN C:PROJECTS\HOLON\DATABASE.MDB
**if (files.Any((fileInfo.Name.Contains)))**
\\DO SOMETHING
Console.WriteLine(
fileInfo.Name, fileInfo.Length,
答案 0 :(得分:2)
如果您已经在数组中收集了文件名,那么您应该采用以下方式:
if (files.Any() && files.Contains(fileInfo.Name))
{
// Do something
}
如果只想检查文件是否存在,则可以使用File.Exists:
if(System.IO.File.Exists(fileInfo.Name))
{
// Do Something
}
答案 1 :(得分:0)
因此,您有完整文件路径的集合?您是否要检查其中一个或多个列表条目是否与特定文件名匹配?
也许这对您有用:
string fileToSearch = "DATABASE.MDB";
bool found = files.Any(fileName => new FileInfo(fileName).Name.ToUpper() == fileToSearch.ToUpper());
编辑:
构造新的FileInfo对象的替代方法是使用System.IO.Path:
bool found = files.Any(fileName => Path.GetFileName(fileName).ToUpper() == fileToSearch.ToUpper());
编辑2:
另一方面,如果您要搜索特定的文件名并想要使用结果,则可以执行以下操作:
var fileToSearch = "DATABASE.MDB";
var fileInfo =
(from f in files
let fi = new FileInfo(f)
where fi.Name.ToUpper() == fileToSearch.ToUpper()
select fi).FirstOrDefault();
if (fileInfo != null)
{
if (fileInfo.Exists)
{
Console.WriteLine($"{fileInfo.Name} ({fileInfo.Length} bytes).");
}
else
{
Console.WriteLine($"{fileInfo.Name} (does not exist).");
}
}
我在这里使用LINQ查询以提高可读性。您也可以使用扩展方法(files.Select(f => new FileInfo(f)).Where(fi => fi.Name.ToUpper() == fileToSearch.ToUpper()).FirstOrDefault()
),但这取决于您。
答案 2 :(得分:0)
if (Array.Exists(files, element => element.Contains(fileInfo.Name)))