您可以将日期临时存储为 yyyyMM 并对其进行排序。
为避免提取日期出现问题,我确保目录名称以六位数字开头。
using System;
using System.Linq;
using System.IO;
using System.Text.RegularExpressions;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
string dirToExamine = @"C:\temp\testDirs";
/* Get the directories which start with six digits */
var re = new Regex("^[0-9]{6}");
var dirs = new DirectoryInfo(dirToExamine).GetDirectories()
.Where(d => re.IsMatch(d.Name))
.ToList();
/* The directory names start MMyyyy but we want them ordered by yyyyMM */
var withDates = dirs.Select(d => new
{
Name = d,
YearMonth = d.Name.Substring(2, 4) + d.Name.Substring(0, 2)
})
.OrderByDescending(f => f.YearMonth, StringComparer.OrdinalIgnoreCase)
.Select(g => g.Name).ToList();
Console.WriteLine(string.Join("\r\n", withDates));
Console.ReadLine();
}
}
}
(它可能看起来像很多代码,但我对其进行了格式化以适应该列的宽度。)
我在这些目录名称(用 列出dir /b
)上对其进行了测试:
012016abcd
042016
062014
0720179876
092018
102018 Some text
并得到了所需的订购:
102018 Some text
092018
0720179876
042016
012016abcd
062014
然后,如果您想按顺序对每个目录中的文件执行某些操作,这很容易,因为您可以.GetFiles()
在 DirectoryInfo 实例上使用:
foreach(var di in withDates)
{
FileInfo[] files = di.GetFiles();
foreach(var fil in files)
{
Console.WriteLine(fil.Name);
}
}