当前位置: 首页 > 编程语言 > C#

如何使用LINQ从子文件夹递归读取文件名分享

时间:2023-04-11 10:40:34 C#

C#学习教程:如何使用LINQ递归读取子文件夹中的文件名现在我正在使用嵌套的for-each循环来执行此操作。有没有办法使用LINQ或LAMBDA表达式?您不需要使用LINQ来执行此操作-它内置于框架中:string[]files=Directory.GetFiles(directory,"*.dll",SearchOption.AllDirectories);或者,如果您使用的是.NET4:IEnumerablefiles=Directory.EnumerateFiles(directory,"*.dll",SearchOption.AllDirectories);老实说,LINQ不太擅长递归。您可能想要编写自己的通用递归扩展方法。考虑到这类问题被问到的频率,我应该自己做一段时间......这只返回文件名+扩展名:DirectoryInfodi=newDirectoryInfo(@"d:somewhere");varq=来自iindi。GetFiles("*.dll",SearchOption.AllDirectories)选择i.Name;这只返回没有扩展名的文件名:DirectoryInfodi=newDirectoryInfo(@"d:somewhere");varq=fromiindi.GetFiles("*.dll",SearchOption.AllDirectories)选择System.IO.Path.GetFileNameWithoutExtension(i.Name);如果你真的想用递归的lambda表达式来做,你去:Action>discoverFiles=null;discoverFiles=newAction>((dir,list)=>{try{foreach(varsubDirinDirectory.GetDirectories(dir))discoverFiles(string.Concat(subDir),list);foreach(vardllFileinDirectory.GetFiles(dir),"*.dll")){varfileNameOnly=Path.GetFileName(dllFile);if(!list.Contains(fileNameOnly))list.Add(fileNameOnly);}}catch(IOException){//决定在这里做什么}});//用法:vartargetList=newList();discoverFiles("c:\MyDirectory",targetList);foreach(targetList中的var项目)Debug.WriteLine(item);注意:这可能比以前的答案慢几倍(并且更难阅读/调试/维护),但如果某处存在I/O异常,它不会停止IEnumerablefilenames=Directory.GetFiles(searchDirectory,"*.dll",SearchOption.AllDirectories).Select(s=>Path.GetFileName(s));Directory.GetFiles()返回指定目录中与指定搜索模式匹配的文件的完整路径。Select将完整路径序列的每个元素项拆分为新形式,仅选择文件名。读取文件和目录通常使用位于System.IO命名空间中的类来完成。所以第一步是使用Directory.EnumerateFiles方法获取所有需要读取的文件,然后每个文件对应于您的搜索条件使用例如File.ReadAllBytes方法读取内容。以上就是C#学习教程:如何使用LINQ从子文件夹中递归读取文件名共享的所有内容。代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: