class="csharpcode"> /// <summary> /// 递归获取文件夹目录下文件 /// </summary> /// <param name="pathName">需要递归遍历的文件夹</param> /// <param name="fileRule">遍历规则『委托』</param> public static void LoopFolder(string pathName, Action<FileInfo> fileRule) { if (string.IsNullOrEmpty(pathName)) throw new ArgumentNullException(pathName); Queue<string> _pathQueue = new Queue<string>(); _pathQueue.Enqueue(pathName); while (_pathQueue.Count > 0) { string _path = _pathQueue.Dequeue(); DirectorySecurity _pathSecurity = new DirectorySecurity(_path, AccessControlSections.Access); if (!_pathSecurity.AreAccessRulesProtected)//文件夹权限是否可访问 { DirectoryInfo _directoryInfo = new DirectoryInfo(_path); foreach (DirectoryInfo diChild in _directoryInfo.GetDirectories()) { _pathQueue.Enqueue(diChild.FullName); } foreach (FileInfo file in _directoryInfo.GetFiles()) { fileRule(file); } } } }
举例使用
CSharpToolV2.LoopFolder(@"C:\Users\Administrator\Downloads\", (FileInfo file) => { if (file.Extension.Equals(".xls"))//获取excel类型文件 { Console.WriteLine(string.Format("============{0}==============", file.FullName)); } });代码效果