【问题标题】:how to take all the files with `.flg` Extension and put the numbers on a list [closed]如何获取所有带有`.flg`扩展名的文件并将数字放在列表中[关闭]
【发布时间】:2023-04-06 14:46:01
【问题描述】:

我在 c:\MyData 中有文件,例如:

demo.txt
test.ini
COUNT030.flg
COUNT011.flg
COUNT020.flg
COUNT031.flg
COUNT045.flg
COUNT067.flg

我需要获取所有带有.flg 扩展名的文件并将数字放在列表中,如下所示:

30
11
20
31
45
67

如何在 C# WinForm 中做到这一点?

提前致谢

【问题讨论】:

    标签: c# .net regex winforms


    【解决方案1】:

    您可以使用Directory.EnumerateFiles(String, String)Directory.GetFiles 方法和掩码*.flg。然后使用Path.GetFileNameWithoutExtension提取没有扩展名的文件名,然后应用正则表达式\d+$匹配数字。

    例子:

    var result = Directory
        .EnumerateFiles(path, "*.flg")
        .Select(s => int.Parse(Regex.Match(Path.GetFileNameWithoutExtension(s), @"\d+$").Value));
    

    【讨论】:

    • +1 实际上提供了一个不需要文件名具有完全相同格式的解决方案。
    • 不错的解决方案,点赞。 @J。 Steen:它仍然不适用于 ("COUNT0AT30.flg", "COUNT0AT31.flg", ...) 类型的序列。
    • @Grozz ,你的意思是你的解决方案?
    • @Grozz,从来没有说过会。 =)
    • @polishchuk,此页面上的解决方案都没有。当然只能在一定程度上放宽格式。
    【解决方案2】:
            DirectoryInfo dirInfo = new DirectoryInfo(folderPath);
            var numbers = from fileInfo in dirInfo.EnumerateFiles("*.flg")
                          let fileName = Path.GetFileNameWithoutExtension(fileInfo.Name)
                          select int.Parse(fileName.Substring("Count".Length, 3));
    
            List<int> lst = numbers.ToList();
    

    【讨论】:

    • 仅当文件名的长度始终相同时才有效
    • 不,如果文件名具有相同的“布局”(即“计数”+ 3 位数字)而不是长度,则它可以工作。
    • 好的,重读后我看到了……
    【解决方案3】:

    所以,正如所承诺的样本:

    DirectoryInfo di = new DirectoryInfo(@"c:\temp\");
    FileInfo[] fis = di.GetFiles("*.flg");
    foreach (FileInfo fi in fis)
    {
        Console.WriteLine("File Name: {0}, Full Name: {1}, Number: {2}", fi.Name, fi.FullName, fi.Name.Substring(fi.Name.LastIndexOf(".") - 3, 3));
    }
    

    要提取数字,请查看示例中的子字符串。

    【讨论】:

      猜你喜欢
      • 2017-03-04
      • 2011-04-30
      • 1970-01-01
      • 2011-03-02
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多