无法通过某些字符串关键字过滤Directory.Getfiles

时间:2019-06-03 19:50:19

标签: c# methods

我正在尝试列出扩展名为.TXT的文件,并且也仅将包含“ EUROPE_”的文件显示在列表框中

private void btnDisplay_Click(object sender, EventArgs e)
{            
    listBox1.Items.Clear();
    var files = Directory.EnumerateFiles("C:\\temp\\FOLDER", "*.*", 
        SearchOption.AllDirectories)
        .Where(s =>  s.Contains("*EUROPE*") || s.EndsWith(".TXT"));
}

点击按钮后什么也没显示

2 个答案:

答案 0 :(得分:1)

您需要对代码进行一些调整,但这并不是一个不好的开始。
首先,您可以使用内置的通配符仅获取txt文件。然后,您可以使用Where确定哪个文件包含“欧洲”。之后,您需要将每个文件添加到列表框中。否则,您显然不会看到它们。

private void btnDisplay_Click(object sender, EventArgs e)
{
    listBox1.Items.Clear();
    var files = Directory.EnumerateFiles("C:\\temp\\FOLDER", "*.txt", SearchOption.AllDirectories)
    .Where(s => s.ToUpper().Contains("EUROPE"));

    foreach(string file in files){
        listBox1.Items.Add(file);
    }
}

编辑:
您确实也可以使用通配符来检查它是否包含欧洲。在我看来,它也更干净,更易读,因此使用它(当然,除了这一行之外,您还需要其余代码)。请参见this answer,其中仅显示了确切的方法,而没有周围的代码。

答案 1 :(得分:1)

您不必使用where子句。 下面的代码行应该起作用:

var files = Directory.EnumerateFiles("C:\\temp\\FOLDER", "*EUROPE_*.txt", SearchOption.AllDirectories)