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

R. *_*tin 6 c# linq arrays

环境: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)));
Run Code Online (Sandbox Code Playgroud)

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

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

Ste*_*ham 7

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

指定路径的扩展名(包括句点"."),或null或String.Empty.

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

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