如何知道Array FileInfo []是否包含文件

时间:2012-06-13 14:39:02

标签: c# linq ienumerable fileinfo

我有以下代码,我在“if语句”收到错误,说FileInfo不包含定义“Contains”

查看文件是否在目录中的哪个是最佳解决方案?

由于

string filePath = @"C:\Users\";
DirectoryInfo folderRoot = new DirectoryInfo(filePath);
FileInfo[] fileList = folderRoot.GetFiles();

IEnumerable<FileInfo> result = from file in fileList where file.Name == "test.txt" select file;
if (fileList.Contains(result))
{
      //dosomething
}

3 个答案:

答案 0 :(得分:14)

删除fileList.Contains(result)并使用:

if (result.Any())
{

}

.Any()是一个LINQ关键字,用于确定结果中是否包含任何项目。有点像.Count() > 0quicker除外。使用.Any()时,只要找到元素,就不再枚举序列,结果为True

事实上,您可以将代码的最后五行从from file in...删除到底部,将其替换为:

if (fileList.Any(x => x.Name == "test.txt"))
{

}

答案 1 :(得分:3)

你可以检查结果的数量

 if (result.Count() > 0)
 {
    //dosomething
 }

答案 2 :(得分:0)

这个怎么样,下面的代码会给你一个文件列表(fullname as a string);返回列表的原因是因为您的子目录可能与'test.txt'具有相同的文件名。

var list = Directory.EnumerateFiles(@"c:\temp\", "test.txt",
           SearchOption.AllDirectories);

如果您非常确定'test.txt'文件只会在其中一个目录中,您可以使用:

string fullname = Directory.EnumerateFiles(@"c:\temp\", "test.txt",
                  SearchOption.AllDirectories).FirstOrDefault();
if (fullname != null) { ..... }