C# 根据文件名中的日期筛选目录中的文件
我需要根据文件名中的日期筛选目录中的文件 该名称有四组数字:C# 根据文件名中的日期筛选目录中的文件,c#,list,file-io,filter,C#,List,File Io,Filter,我需要根据文件名中的日期筛选目录中的文件 该名称有四组数字: 9999.99999.201305021219.99999999.txt 当有多个文件重复第二组数字时,我希望根据第三组数字(YYYYMMDDHHMM)上的日期使用较新的文件 如果目录中有以下文件: 1 1100.04037.201305090945.04542592.TXT 2 1100.04041.201305091108.04542707.TXT 3 1100.04041.201305091117.60563353
9999.99999.201305021219.99999999.txt
当有多个文件重复第二组数字时,我希望根据第三组数字(YYYYMMDDHHMM)上的日期使用较新的文件
如果目录中有以下文件:
1 1100.04037.201305090945.04542592.TXT
2 1100.04041.201305091108.04542707.TXT
3 1100.04041.201305091117.60563353.TXT
4 1100.04047.201305080942.04541666.TXT
5 1100.24084.201305021658.04539125.TXT
6 1100.24084.201305061731.04540560.TXT
我希望第2行和第5行中的内容被丢弃。这就是我如何遍历目录文件的方法:
public static void Main(string[] args)
{
string directory = @"\\some\net\path";
string[] arquivos = Directory.GetFiles(directory, "1100.*.txt", SearchOption.TopDirectoryOnly);
foreach (string arquivo in arquivos)
{
Console.WriteLine(arquivo.Substring(directory.Length + 1));
}
Console.ReadLine();
}
根据目录中的文件数量,我建议在遍历文件夹时使用字典保存值。您可以使用第二组数字作为键,然后检查字典中是否已存在该键。如果是,您可以执行任何适合的比较,以确定保留哪一个。DateTime.ParseExact和匿名对象是您的朋友。
var ci = CultureInfo.InvariantCulture;
// first, parse your input files:
var parsed =
from f in arquivos
let c = Path.GetFileName(f).Split('.')
select new
{
Key = c[1],
Name = f,
Date = DateTime.ParseExact(c[2], "yyyyMMddHHmm", ci)
};
// now, group by file id, and order by file date,
// picking record by latest date:
var result =
parsed.GroupBy(g => g.Key)
.Select(t => t.OrderByDescending(z => z.Date)
.Select(z => z.Name).First()).ToList();
var files = arquivos
.Select(f => new{OrgName = f, Parts = new FileInfo(f).Name.Split('.')})
.GroupBy(x=>x.Parts[1])
.Select(g=>g.OrderByDescending(x=>x.Parts[2]).First().OrgName);
foreach (string arquivo in files)
{
.....
}