【发布时间】:2016-01-13 19:48:40
【问题描述】:
这个问题类似: Possible to specify directory path with a wildcard?
但是,就我而言,我想从每个名为“data”的文件夹中获取所有文件,该文件夹是我目录中所有文件夹的第一个子文件夹。
假设我需要以下内容:
string[] files = System.IO.Directory.GetFiles(directory + "\\Share\\*\\data");
*'directory' 只是目录路径的字符串
GetFiles 和 GetDirectories 方法都不接受通配符,我的理解是,它们必须用作过滤器作为第二个参数(这两种方法都有重载)。但是在 GetFiles 的情况下,它专门用于过滤 files 而不是目录,在 GetDirectories 的情况下,它给了我同样的错误,好像过滤器只适用于最低级别的目录(或类似的东西)。
我可以通过多次调用 GetDirectories 和 GetFiles 来做到这一点 一个循环,但我宁愿找到更多 优雅的解决方案。 (即我要避免的::获取所有目录 在我的目录\共享下,循环并添加获取每个文件的所有文件 \data 目录,将所有这些聚集到一个列表中 我的文件名等字符串...)
编辑 - 解决方案:: 实际上@Steve Wong 向我指出了我所采用的解决方案(希望正则表达式不是一个大禁忌):
Regex reg = new Regex(@"^\\" + directory + @"\\Share\\.*\\data\\.*\.xml$");
List<string> files = System.IO.Directory.GetFiles(connect + "\\Share","*.*",SearchOption.AllDirectories).Where(path => reg.IsMatch(path)).ToList();
感谢您的帮助!
【问题讨论】:
-
我认为除了循环之外别无他法。将其提取到一个方法中并忘记它......你说它“更重”,但任何其他实现都可能做到这一点,只是你不会直接看到它。
-
是的,你可能是对的,我问了一圈,我得出了这个结论。
标签: c#