目前我正在循环浏览我的文件系统
For Each filename As String In Directory.GetFiles(sourceFolder, "*.doc")
但是,这包括将docx文件包含在GetFiles返回的文件列表中。我希望只搜索doc文件而不是docx。我知道在搜索模式中是否有截断或停止搜索字符?
答案 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);
}