前言
在項目中大家肯定偶爾會有遍歷文件夾的需求,還在老老實實寫遞歸么?!那怕是騷一點的linq遞歸,其實都太麻煩了,微軟爸爸早就想到我們有這樣的需求,直接在框架內部已經實現好了。
實現
遍歷文件夾其實只需要一個函數就搞定了,都不用去考慮遞歸,真的太強了。
var files = Directory.GetFiles(@"C:\", "*.*",SearchOption.AllDirectories); // 遍歷所有文件
var dirs= Directory.GetDirectories(@"C:\", "*", SearchOption.AllDirectories); //遍歷所有文件夾
或者
var files = Directory.EnumerateFiles(@"C:\", "*.*",SearchOption.AllDirectories); // 遍歷所有文件
var dirs= Directory.EnumerateDirectories(@"C:\", "*", SearchOption.AllDirectories); //遍歷所有文件夾
再或者
var files = new DirectoryInfo(@"C:\").GetFiles("*.*",SearchOption.AllDirectories); // 遍歷所有文件,得到FileInfo類型的集合
var dirs= new DirectoryInfo(@"C:\").GetDirectories("*", SearchOption.AllDirectories); //遍歷所有文件夾,得到DirectoryInfo類型的集合
var files = new DirectoryInfo(@"C:\").EnumerateFiles("*.*",SearchOption.AllDirectories); // 遍歷所有文件,得到FileInfo類型的集合
var dirs= new DirectoryInfo(@"C:\").EnumerateDirectories("*", SearchOption.AllDirectories); //遍歷所有文件夾,得到DirectoryInfo類型的集合
其中第三個參數SearchOption.AllDirectories表示搜索本文件夾和所有子目錄,很碉堡吧。
" * . * "也可以是" * ",通配符都一樣。通配符支持*,?,跟Windows資源管理器套路是一樣的,
如果再加一句:
var list=files.Union(dirs).OrderBy(s=>s);
那不就實現了當前文件夾遞歸的結果包含文件和文件夾的同時遍歷了么!
轉自:懶得勤快
鏈接:masuit.net/1878?t=0HN5MUNN39GHN
該文章在 2025/3/21 10:02:28 編輯過