求助:如何在C#中按文件名前缀数字对文件进行分组
按文件名前缀数字分组的解决方案
你可以利用LINQ的GroupBy方法结合字符串处理实现分组,具体步骤如下:
完整代码示例
先确保引用必要的命名空间:
using System; using System.IO; using System.Linq;
然后执行分组逻辑:
// 获取目标目录下所有txt文件的完整路径 string[] filePaths = Directory.GetFiles(@"C:\Maps\", "*.txt", SearchOption.TopDirectoryOnly); // 按文件名开头的数字分组 var groupedFiles = filePaths.GroupBy(path => { // 从完整路径中提取纯文件名 string fileName = Path.GetFileName(path); // 定位下划线分隔符的位置 int underscorePos = fileName.IndexOf('_'); // 尝试截取前缀并转换为数字,作为分组键 if (underscorePos > 0 && int.TryParse(fileName.Substring(0, underscorePos), out int groupNumber)) { return groupNumber; } // 对不符合格式的文件返回标记值,后续可过滤 return -1; }) // 过滤掉格式不符合的文件分组 .Where(g => g.Key != -1) // 按分组数字升序排列 .OrderBy(g => g.Key);
遍历分组结果
如果需要输出或处理分组后的文件,可按如下方式遍历:
foreach (var group in groupedFiles) { Console.WriteLine($"--- 分组 {group.Key} ---"); foreach (var filePath in group) { Console.WriteLine(Path.GetFileName(filePath)); } }
逻辑说明
- 提取文件名:用
Path.GetFileName剥离完整路径,只保留文件名部分,避免路径字符干扰分组逻辑。 - 提取分组键:通过下划线定位前缀数字范围,用
int.TryParse确保前缀为有效数字,避免格式错误的文件引发异常。 - 过滤与排序:过滤掉格式不符的分组,再按分组数字排序,保证分组顺序符合预期。
内容的提问来源于stack exchange,提问作者Sarper Sözen
相关产品推荐
相关产品推荐

