C# 从包含一系列基于文件名进行版本控制的文件的文件夹中查找文件
给定的目录包含 AA20180501_1.txt ,AA20180501_3.txt ,... ,AA20180501(n).txt ,AA20180502_1.txt ,... ,AA20180502(n).txt 等等 我需要将每天最高(_n)的文件添加到arraylist中,我需要用C#来完成 我有没有提到我对C#的了解充其量只是粗略的?C# 从包含一系列基于文件名进行版本控制的文件的文件夹中查找文件,c#,C#,给定的目录包含 AA20180501_1.txt ,AA20180501_3.txt ,... ,AA20180501(n).txt ,AA20180502_1.txt ,... ,AA20180502(n).txt 等等 我需要将每天最高(_n)的文件添加到arraylist中,我需要用C#来完成 我有没有提到我对C#的了解充其量只是粗略的? 非常感谢您的任何想法和建议。请随意将文件扩展名更改为您需要的扩展名 string pattern = "(?i)([a-z]+[0-9]+)_([0-9
非常感谢您的任何想法和建议。请随意将文件扩展名更改为您需要的扩展名
string pattern = "(?i)([a-z]+[0-9]+)_([0-9]+).txt";
var his =
from file in Directory.EnumerateFiles(@"C:\Temp\test\", "*.txt")
let match = Regex.Match(file, pattern)
where match.Success
let info = new { Name = match.Groups[1].Value, Num = match.Groups[2].Value }
group info by info.Name into g
select new { FileName = g.Key, MaxNum = g.Max(x => x.Num) };
foreach(var hi in his)
{
WriteLine($"File name '{hi.FileName}' has max num: '{hi.MaxNum}'");
}
请尝试这个简单的解决方案
DirectoryInfo directory = new DirectoryInfo(@"D:\Temp\");
var files = directory.GetFiles("*.txt")
.OrderBy(x => x.Name)
.GroupBy(x => x.Name.Substring(2, 8))
.Select(x => x.Last())
.ToArray();
这太宽泛了,无法回答,我们不是一个代码编写服务。使用谷歌查找如何搜索目录中的文件,如何操作字符串等。@MongZhu查看文件名…它们有日期戳…因此有“每天”的评论…@MongZhu
我们怎么知道这一点?
询问通常是有效的。当我输出文件名时,它缺少“\un”
文件扩展名之前的模式。键match.Groups[1].Value
似乎没有提供完整的文件名???@AussieJoe请原谅,但我不明白你想说什么。OP非常清楚地显示了一个文件名示例。@AussieJoe只是将字符串连接起来:$“{hi.FileName}{hi.MaxNum}”
@AussieJoevar arr=his.Select(hi=>$“{hi.FileName}{hi hi.MaxNum}”).ToArray()代码>@AussieJoe为什么?更正代码。非匹配项会被过滤掉。这是更好的答案。如果您只需删除var files=
语句,就可以将其组合成一条语句。此外,我建议将其设置为.ToArray(),就像OP要求的那样。