如何使用linq使用文件名从目录中过滤文件?

时间:2015-12-29 05:51:14

标签: c# linq

var GetFileByFileName = Directory.GetFiles(SourceFilePath)
                                       .Select(x => new FileInfo(x))
                                       .Where(x => x.Name==SourceFileName)
                                       .Take(1)
                                       .ToArray();

这是我的指定文件名获取文件的代码。我在使用数组。在这里SOURCEFILENAME是一个字符串变量,它具有文件名。但它不工作。我可以从目录获取所有文件。但我只需要一个基于SOURCEFILENAME的目录中的文件。请帮帮我..谢谢。 。

3 个答案:

答案 0 :(得分:2)

如果你想使用你目前使用的方式,你可以用下面提到的方式实现

 var GetFileByFileName = Directory.GetFiles(@"D:\Re\reactdemo")
                                       .Select(x => new FileInfo(x))
                                       .Where(x => x.Name == "package.json")
                                       .Take(1)
                                       .ToArray();

检查你的SourcePath应该看起来像我在代码中硬编码的那样,你的源文件应该是扩展名

答案 1 :(得分:0)

您的代码很好,应该可以使用。

或者,您可以在没有Linq的情况下执行此操作。 Directory.GetFiles有一个重载,它接受文件搜索模式,您可以在其中传递文件名。

var fileInfo = Directory.GetFiles(SourceFilePath, SourceFileName);

其中,例如

var SourceFilePath = @"C:\MyBackUp\Files";
var SourceFileName = @"MyTextFile.txt";

请参阅this以供参考。

答案 2 :(得分:0)

当你同时拥有文件名和路径时,为什么需要使用linq搜索所有文件?您的linq查询正在比较== SourceFileName,这是您使用标准File操作直接搜索文件所得到的。

var file = Path.Combine(SourceFilePath, SourceFileName);

//check if exists
if (File.Exists(file))
{
  // open your file to read it as needed
  // e.g. reading as text:
  var content = File.ReadAllText(file);

}