3 回答
TA贡献1826条经验 获得超6个赞
您可以使用SkipWhile,假设顺序是按字母顺序排列的:
foreach(string path in Directory.GetDirectories("/root/")
.Select(dir => Path.GetFileName(dir))
.SkipWhile(dir => string.Compare(dir, "DirectoryC") < 0)
{
Console.WriteLine(path);
}
这样您就可以避免在遇到第一个有效目录后进行冗余过滤。
如果您只想获取文件夹,然后DirectoryC才能使用TakeWhile:
foreach(string path in Directory.GetDirectories("/root/")
.Select(dir => Path.GetFileName(dir))
.TakeWhile(dir => string.Compare(dir, "DirectoryC") < 0)
{
Console.WriteLine(path);
}
请注意,这string.Compare取决于文化,您可以使用其他重载来自定义其行为。
TA贡献1875条经验 获得超3个赞
使用Where扩展方法
foreach(string path in Directory
.GetDirectories("/root/")
.Where(d => String.Compare(Path.GetFileName(d), "DirectoryC") > 0))
{
Console.WriteLine(path);
}
如果需要,您还可以包含一个排序,但它不会影响使用Where. 如果你这样做了,Where为了效率,把它附加在后面。
TA贡献1816条经验 获得超4个赞
或者以防万一您使用的是旧版本的 .NET,您总是可以自己编写逻辑:
var directories = Directory.GetDirectories("C:\\").OrderByDescending(r => r).ToArray();
if (directories != null && directories.Length > 0)
{
for (int i = 0, Cindex=-1; i < directories.Length; i++)
{
if (Cindex > 0)
{
Console.WriteLine(directories[i]);
continue;
}
if (directories[i] == "DirectoryC")
{
Cindex = i;
}
}
}
- 3 回答
- 0 关注
- 293 浏览
添加回答
举报