使用LINQ在C#中计算文件数

前端之家收集整理的这篇文章主要介绍了使用LINQ在C#中计算文件数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
环境:C#,VStudio 2013,4.5框架,Winforms

目标:获取与存储在字符串数组中的扩展名匹配的文件夹和子文件夹中的文件数(Count).扩展数组可以是“.”不是. { “.DAT”,“TXT”,“味精”}

到目前为止我做了什么:当我有“.”在扩展数组中,一切正常:{“.dat”,“.txt”,“.msg”}

我尝试过替换,但它总是返回0.

工作代码(仅当字符串数组中始终带有“.”时):

string[] ext= new string[] { ".txt",".msg",".dat" };
totalFilesInTN = Directory.EnumerateFiles(dlg1.SelectedPath,"*.*",SearchOption.AllDirectories)
                          .Count(s => ext.Any(s1 => s1 == Path.GetExtension(s)));

不工作的代码(总是返回0):

string[] ext= new string[] { "txt","dat" };
totalFilesInTN = Directory.EnumerateFiles(dlg1.SelectedPath,SearchOption.AllDirectories)
                          .Count(s => ext.Any(s1 => s1 == Path.GetExtension(s).Replace(".","")));

解决方法

Path.GetExtension方法的文档声明返回值为:

The extension of the specified path (including the period “.”),or null,or String.Empty.

你的第二段代码剥离了’.’所以没有一个元素会匹配.因此,请使用与扩展列表相反的方式,并确保每个扩展名的开头都有一个’.’然后使用您的第一个代码块.

string[] ext = new string[] {"txt",".dat" }
    .Select(x => x.StartsWith(".") ? x : "." + x)
    .ToArray();

猜你在找的C#相关文章