Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从包含一系列基于文件名进行版本控制的文件的文件夹中查找文件_C# - Fatal编程技术网

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

给定的目录包含 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]+).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}”
@AussieJoe
var arr=his.Select(hi=>$“{hi.FileName}{hi hi.MaxNum}”).ToArray()@AussieJoe为什么?更正代码。非匹配项会被过滤掉。这是更好的答案。如果您只需删除
var files=
语句,就可以将其组合成一条语句。此外,我建议将其设置为.ToArray(),就像OP要求的那样。