【发布时间】:2018-10-06 03:28:43
【问题描述】:
我需要有人指引我正确的方向。
目标:
在名称中包含字符串的路径中返回 文件夹名称 列表。例如:路径有一个名为 Pictures_New 和 Videos_New 的目录。我正在搜索的字符串是“Pictures_”和“Videos_”。
这一切都适用于一个作为搜索字符串传递的字符串参数。我的问题是让它与多个过滤器一起工作。我知道使用文件名和扩展名很容易完成。
这正在传递给GetFolders():
string[] filterStrings = { "Pictures_", "Videos_" }
我的其余代码:
public IEnumerable<string> GetFolders(string path, string[] filterStrings, SearchOption searchOption = SearchOption.AllDirectories)
{
IEnumerable<string> folders = Directory.EnumerateDirectories(path, "Pictures_*.*", searchOption);
var resultFolders = new List<string>();
if(filterStrings.Length > 0)
{
foreach (var foldername in folders)
{
string folderName = Path.GetFileName(Path.GetDirectoryName(foldername));
if (string.IsNullOrEmpty(folderName) || Array.IndexOf(filterStrings, "*" + folderName) < 0)
{
// This leaves us only with the Directory names. No paths.
var b = (foldername.Substring(foldername.LastIndexOf(@"\") + 1));
resultFolders.Add(b);
}
}
}
return resultFolders;
}
【问题讨论】:
-
我不确定
"Pictures_*.*"是否会匹配任何目录,它看起来更像是一个文件过滤器... -
但确实如此,除非我完全没有抓住重点。这些目录中当前没有文件。我得到了所有带有 Pictures_ 的目录返回的名称。
-
为什么不使用 filterStrings.Contains(folderName) ?
标签: c# winforms linq directory