如何使用GetFiles()搜索包含doc文件但是excude docx文件?

时间:2016-02-04 15:22:29

标签: c# .net regex vb.net filesystems

目前我正在循环浏览我的文件系统

For Each filename As String In Directory.GetFiles(sourceFolder, "*.doc")

但是,这包括将docx文件包含在GetFiles返回的文件列表中。我希望只搜索doc文件而不是docx。我知道在搜索模式中是否有截断或停止搜索字符?

3 个答案:

答案 0 :(得分:6)

这是GetFiles的默认行为,您可以使用LINQ进行进一步过滤。

var files = Directory.GetFiles(@"C:\test", "*.doc")
             .Where(file=> file.EndsWith(".doc", StringComparison.CurrentCultureIgnoreCase))
             .ToArray();//If you want an array back

Directory.GetFiles Method (String, String)

  

在searchPattern中使用星号通配符时   as“* .txt”,指定扩展名中的字符数   影响搜索如下:

     
      
  • 如果指定的扩展名正好三个字符,则该方法返回扩展名以指定扩展名开头的文件。例如,“* .xls”同时返回“book.xls”和“book.xlsx”。
  •   

答案 1 :(得分:3)

鉴于你想迭代你的文件并考虑这些方法的默认行为,我建议使用EnumerateFiles而不是GetFiles。通过这种方式,您可以添加对当前文件扩展名的简单检查

foreach(string filename in Directory.EnumerateFiles(sourceFolder, "*.doc"))
{
   if(!filename.EndsWith("x", StringComparison.CurrentCultureIgnoreCase))
   {
      .....
   }
}    

不仅仅是Linq解决方案的优雅,但仍在工作,而不是创建目录中存在的所有文件名的数组

答案 2 :(得分:1)

我不是C#程序员,所以可能会出现语法错误,但我认为这可能会解决您的问题。

foreach (FileInfo fi in di.GetFiles("*.doc")
    .Where(fi => string.Compare(".doc", fi.Extension,  
StringComparison.OrdinalIgnoreCase) == 0))
{
 myFiles.Add(fi);
}