【发布时间】:2011-05-31 22:35:57
【问题描述】:
我想使用 Directory.GetDirectories 方法来获取所有包含一些排除项的目录。特别是我需要排除其中有连字符的目录。我已经发现正则表达式不能用作搜索模式。我会使用什么搜索模式?
【问题讨论】:
标签: c# file-io directory getdirectories
我想使用 Directory.GetDirectories 方法来获取所有包含一些排除项的目录。特别是我需要排除其中有连字符的目录。我已经发现正则表达式不能用作搜索模式。我会使用什么搜索模式?
【问题讨论】:
标签: c# file-io directory getdirectories
也许一个 linq 查询就足够了?
//query notation
var result = from d in Directory.GetDirectories(path)
where !d.Contains("-")
select d;
//'dot' notation
var result2 = Directory.GetDirectories(path)
.Where(dir => !dir.Contains("-"));
编辑(更多解释)
上面的解决方案称为"LINQ to Objects"。这是一种查询实现IEnumerable或IEnumerable<T>接口的集合的方法。 GetDirectories 方法返回有资格使用 Linq 的字符串的 Array。网上有很多关于 Linq 的资料。要了解 Linq 的强大功能,请浏览 MSDN 上的这些示例:101 Linq Samples。 BTW Linq 对于从 XML、数据库等各种来源检索数据非常有用。
【讨论】:
Directory.EnumerateDirectories()。
System.Collections.ObjectModel.Collection<string> resultDirs=new System.Collections.ObjectModel.Collection<string> ();
foreach (string dir in System.IO.Directory.GetDirectories("path"))
{
if (!dir.Contains("-")) resultDirs.Add(dir);
}
【讨论】:
不是 LINQ 方式:
static void Main(string[] args)
{
string StartingPath = "c:\\";
List<string> mydirs = new List<string>(); // will contains folders not containing "-"
foreach (string d in Directory.GetDirectories(StartingPath))
{
if (!(d.Contains("_")))
{
mydirs.Add(d);
}
foreach (string dir in mydirs)
{
Console.WriteLine(dir);
}
}
}
}
【讨论】: