这个问题类似: Possible to specify directory path with a wildcard?
但是在我的情况下,我想从名为' data'的每个文件夹中获取所有文件。这是我目录中所有文件夹的第一个子项。
假设我需要的是以下内容:
string[] files = System.IO.Directory.GetFiles(directory + "\\Share\\*\\data");
*'目录'只是目录路径的一个字符串
GetFiles和GetDirectories方法都不接受通配符,这是我的理解,它们必须用作过滤器作为第二个参数(这两种方法都有重载)。但是在GetFiles的情况下,它专门用于过滤文件而不是目录,而在GetDirectories的情况下,它给了我同样的错误,就像过滤器只适用于最低级目录一样(或类似的事情。)
我可以通过多次调用GetDirectories和GetFiles来实现此目的 循环,但我宁愿找到更多 优雅的解决方(即我想避免的::获取所有目录 在我的目录\ Share下,循环并为每个文件添加get文件 那些数据目录,将所有这些集合成一个列表 我的文件名的字符串等...)
编辑 - 解决方案:: 实际上@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();
感谢您的帮助!
答案 0 :(得分:1)
你可以试试这个:
string rootDirectory = directory + "\\Share\\";
var files = Directory.GetDirectories(rootDirectory, "*", SearchOption.AllDirectories).Where(
(directoryPath) => StringComparer.OrdinalIgnoreCase.Compare(Path.GetFileName(directoryPath), "Data") == 0).SelectMany(
(directoryPath) => Directory.GetFiles(directoryPath, "*"));
Where子句将返回以“Data / data”文件夹结尾的所有文件夹路径,然后SelectMany将返回这些文件夹中的所有文件。