【发布时间】:2016-08-13 16:15:48
【问题描述】:
我正在使用 C# 和 .net 4.0 在 Visual Studio 2012 中构建 Windows 应用程序。
该程序的功能之一是搜索满足给定搜索条件的所有文件,这些条件通常(但不总是)包括通配符。
搜索条件在运行时未知;它是从 Excel 电子表格导入的。
可能的搜索条件可以包括以下内容:
- 准确路径
- “C:\temp\directory1\directory2\someFile.txt”
- 路径,文件名中带有通配符:
- "C:\temp\directory1\directory2*.*"
- 文件名,路径中带有通配符:
- "C:\temp*\directory*\someFile.txt"
- 带有通配符的文件名和路径:
- “C:\temp\*\*\*.*”
- 以上所有,具有任意目录结构:
- "C:\temp\dir*1\dir*\anotherdir\*\another*\file*.txt"
- “C:\te*\*\someFile.txt”
- “C:\temp\*tory1\dire*2\*\*\*\*\*.*”
我尝试使用Directory.EnumerateFiles:
IEnumerable<string> matchingFilePaths = System.IO.Directory.EnumerateFiles(@"C:\", selectedItemPath[0], System.IO.SearchOption.AllDirectories);
但这仅适用于上述情况 2。尝试在文件夹名称中使用带有通配符的 Directory.EnumerateFiles 会导致“非法字符”豁免。
我希望 .net 中有一个单行代码可以用来进行文件搜索。通配符的数量和目录结构的深度在运行时是未知的,并且可以想象搜索可能必须深入一百个文件夹,每个文件夹都包含未知数量的通配符。 (这是问题的症结所在)。尽量避免嵌套的 for 循环数量过多。
我阅读了here 的解决方案,但这似乎不适用于任意文件夹结构。
【问题讨论】:
-
恐怕 .net 有满足您要求的 API。你必须自己写。
-
很明显,您引用的问题有一个让您开始的地方,如果您想自己做这件事,那么您当然可以使用它作为参考。您是否要求我们不费吹灰之力地为您完成这项工作?