【发布时间】:2017-06-21 21:32:30
【问题描述】:
我正在尝试获取下面提到的路径中的文档文件。所以我将文件类型设置为 doc 和 docx。
在文档文件夹中,我有文件“issues.docx”
string path1 = "C:\\Documents\\";
var dir = new DirectoryInfo(path1);
string[] fileTypes = { "doc", "docx" };
var myFiles = fileTypes.SelectMany(dir.GetFiles);
这是我在我的应用程序中使用的代码。在这里它会返回两次 issues.docx 文件。但它应该只返回一次文件。如何在不更改fileTypes 的情况下实现它?
【问题讨论】:
-
*.doc也将匹配*.docx(用于旧版 8.3 命名支持)。 Better to useEnumerateFiles() -
EnumerateFiles() 也返回相同的结果
-
@Joy NTFS 不是搜索引擎。执行两个单独的搜索将导致对所有文件进行两次扫描,从而使时间加倍。如果您使用
EnumerateFiles搜索*.doc*文件并随后按扩展名拆分它们会更快,例如使用ToDictionary -
我在一个目录中创建了
A.DOC和A.DOCX,您的代码重复,因为它遍历两次 并且通配符冲突,Directory.EnumerateFiles("c:\\null\\temp", "*.*").Where(s => s.EndsWith(".doc") || s.EndsWith(".docx"));只返回每个文件一次。 -
@Joy 您是否按照链接的答案显示的内容进行操作,或者您是否使用了与
EnumerateFiles相同的错误代码?链接的问题读取匹配的文件一次然后过滤它们
标签: c#