[C#]递归遍历文件夹

// <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));
                    }
                });

  

代码效果

时间: 2024-12-18 08:30:40

[C#]递归遍历文件夹的相关文章

linux文件夹操作及递归遍历文件夹

文件夹相关函数介绍 //mkdir 函数创建文件夹 #include <sys/stat.h> #include <sys/types.h> int mkdir(const char *pathname, mode_t mode); //rmdir 删除文件夹 #include <unistd.h> int rmdir(const char *pathname); //dopendir/fdopendir  //打开文件夹 DIR是一个结构体,是一个内部结构,用来存储读

java File基本操作,以及递归遍历文件夹

java 的文件操作,相对来说是比较重要的,无论是编写CS还是BS程序,都避免不了要与文件打交道,例如读写配置文件等.虽然现在很多框架都直接帮你做好了这一步! java.io.File 底层是调用与c语言接的接口,所以我们暂时不需要知道底层是怎么实现的,再说了,也看不见,最多就是看见一个接口而已.我们只需要知道java.io.File提供给我们对文件的一些操作就行了. 1.文件的创建 :java的文件创建可以直接通过new一个对象来实现. File file = new File(String

递归遍历文件夹中的文件

package util; import java.io.File; import java.util.ArrayList; import entity.FileOfDown; public class FileUtil { public static ArrayList<File> getFiles(String absolutePath){ return new FileList(absolutePath).fileList ; } /** * * 功能: 实现遍历指定绝对路径下的所有文件

递归遍历文件夹、取所有文件。包括子目录。

private int count = 0; private int TransformFiles(string path) { DirectoryInfo dir = new DirectoryInfo(path); DirectoryInfo[] dirs = dir.GetDirectories(); //获取子目录 FileInfo[] files = dir.GetFiles("*.*"); //获取文件名 List<string> list = new List

Java递归遍历文件夹

import java.io.File; public class Test { /** * @param args * @author itmyhome */ public static void main(String[] args) { File f = new File("F:/javaAPI/JavaAPI1.6/java/awt"); printFile(f, 0); } public static void printFile(File f, int len) { Str

windows API递归遍历文件夹下所有文件

1.网上有些代码有问题,改进如下 #include <stdio.h> #include<windows.h> #include<iostream> #include<string> using namespace std; int count = 0; void find(char * lpPath) { char save_path[200]; char szFile[MAX_PATH] = {0}; char szFind[MAX_PATH]; cha

PHP递归遍历文件夹

function get_files($dir) { $files = array(); if(!is_dir($dir)) { return $files; } $handle = opendir($dir); if($handle) { while(false !== ($file = readdir($handle))) { if ($file != '.' && $file != '..') { $filename = $dir . "/"  . $file;

PHP递归和非递归遍历文件夹下文件

function readDirFiles($dir){ $files= []; $queue=[realpath($dir)]; $currentPath = current($queue); while($currentPath) { $path = $currentPath; if (is_dir($path) && $handle = opendir($path)) { while ($file = readdir($handle)) { if ($file == '.' || $

SHELL递归遍历文件夹下所有文件

#!/bin/bash read_dir(){ for file in `ls -a $1` do if [ -d $1"/"$file ] then if [[ $file != '.' && $file != '..' ]] then read_dir $1"/"$file fi else echo $1"/"$file fi done } #测试目录 test read_dir test 原文地址:https://www.c