zoukankan      html  css  js  c++  java
  • C#.NET中遍历指定目录下的文件(及所有子目录及子目录里更深层目录里的文件)

    //遍历一个目录下所有的文件列表,代码实例

    DirectoryInfo dir = new DirectoryInfo(folderName);
    var list = GetAll(dir);

    /// <summary>
            /// 搜索文件夹中的文件
            /// </summary>
            /// <param name="dir"></param>
            /// <returns></returns>
            private static List<string> GetAll(DirectoryInfo dir)
            {
                List<string> fileList = new List<string>();
                FileInfo[] allFile = dir.GetFiles();
                foreach (FileInfo fi in allFile)
                {
                    fileList.Add(fi.FullName);
                }
                DirectoryInfo[] allDir= dir.GetDirectories();
                foreach (DirectoryInfo d in allDir)
                {
                    fileList.AddRange(GetAll(d));
                }
                return fileList;
            }

    File------实用类,提供许多静态方法,用于移动、删除、和复制文件。

    Directory------实用类,提供许多静态方法,用于移动、删除和复制目录。

    FileInfo------表示磁盘上的物理文件,具有可以处理此文件的方法,要完成对文件的读写工作,就必须创建Stream对像。

    DirectoryInfo------表示磁盘上的物理目录,具有可以处理此目录的方法

    这里提供了三种方法:

    1、获得指定目录下的所有文件

    2、获得指定目录及其子目录的所有文件

    3、列出指定目录下及所其有子目录及子目录里更深层目录里的文件(需要递归)

    代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.IO;
    
    namespace WebAppFile
    {
        public partial class _Default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                string filePath=@"c:/log/";
                Response.Write("测试1,获得指定目录下的所有文件:<br>");
                List<FileInfo> list1 = GetFilesByDir(filePath);
                foreach (FileInfo fi in list1)
                {
                    Response.Write("完整路径:" + fi.FullName.ToString() + " 文件名:" + fi.Name + "<br>");
                }
    
                Response.Write("<br><br>测试2,获得指定目录及其子目录的所有文件:<br>");
                List<FileInfo> list2 = GetAllFilesByDir(filePath);
                foreach (FileInfo fi in list2)
                {
                    Response.Write("完整路径:"+fi.FullName.ToString() +" 文件名:"+fi.Name+ "<br>");
                }
    
                Response.Write("<br><br>测试3,列出指定目录下及所有子目录及子目录里更深层目录里的文件:<br>");
                GetAllFiles(filePath);
    
            }
    
            /// <summary>
            /// 获得指定目录下的所有文件
            /// </summary>
            /// <param name="path"></param>
            /// <returns></returns>
            public List<FileInfo> GetFilesByDir(string path)
            {
                DirectoryInfo di = new DirectoryInfo(path);
    
                //找到该目录下的文件
                FileInfo[] fi = di.GetFiles();
    
                //把FileInfo[]数组转换为List
                List<FileInfo> list = fi.ToList<FileInfo>();
                return list;
            }
    
            /// <summary>
            /// 获得指定目录及其子目录的所有文件
            /// </summary>
            /// <param name="path"></param>
            /// <returns></returns>
            public List<FileInfo> GetAllFilesByDir(string path)
            {
                DirectoryInfo dir = new DirectoryInfo(path);
    
                //找到该目录下的文件
                FileInfo[] fi = dir.GetFiles();
    
                //把FileInfo[]数组转换为List
                List<FileInfo> list = fi.ToList<FileInfo>();
    
                //找到该目录下的所有目录里的文件
                DirectoryInfo[] subDir = dir.GetDirectories();
                foreach (DirectoryInfo d in subDir)
                {
                    List<FileInfo> subList = GetFilesByDir(d.FullName);
                    foreach (FileInfo subFile in subList)
                    {
                        list.Add(subFile);
                    }
                }
                return list;
            }
    
            /// <summary>
            /// 列出指定目录下及所其有子目录及子目录里更深层目录里的文件(需要递归)
            /// </summary>
            /// <param name="path"></param>
            public void GetAllFiles(string path)
            {
                DirectoryInfo dir = new DirectoryInfo(path);
    
                //找到该目录下的文件
                FileInfo[] fi = dir.GetFiles();
                foreach (FileInfo f in fi)
                {
                    Response.Write("完整路径:" + f.FullName.ToString() + " 文件名:" + f.Name + "<br>");
                }
    
                //找到该目录下的所有目录再递归
                DirectoryInfo[] subDir = dir.GetDirectories();
                foreach (DirectoryInfo d in subDir)
                {
                    GetAllFiles(d.FullName);
                }
            }
        }
    }

    运行结果:
    
    测试1,获得指定目录下的所有文件:
    完整路径:c:/log/2010-12-17.xml 文件名:2010-12-17.xml
    完整路径:c:/log/2010-12-20.xml 文件名:2010-12-20.xml
    
    测试2,获得指定目录及其子目录的所有文件:
    完整路径:c:/log/2010-12-17.xml 文件名:2010-12-17.xml
    完整路径:c:/log/2010-12-20.xml 文件名:2010-12-20.xml
    完整路径:c:/log/LogBak/2010-11-20.xml 文件名:2010-11-20.xml
    
    测试3,列出指定目录下及所有子目录及子目录里更深层目录里的文件:
    完整路径:c:/log/2010-12-17.xml 文件名:2010-12-17.xml
    完整路径:c:/log/2010-12-20.xml 文件名:2010-12-20.xml
    完整路径:c:/log/LogBak/2010-11-20.xml 文件名:2010-11-20.xml
    完整路径:c:/log/LogBak/TempLog/2010-11-20.xml 文件名:2010-11-20.xml

    关于第3种列出指定目录下及其所有子目录及子目录里更深层目录里的文件(需要递归),如何写成一个方法呢,希望大家来帮忙。

  • 相关阅读:
    Uboot启动流程分析(四)
    git更新提交到仓库
    MSM8953通过ADB进行AT指令操作
    Uboot启动流程分析(五)
    去除字符串中多个空格,保留一个空格
    socket握手SYN和ACK理解
    Redhat6更改yum源 (转)
    form提供的两种数据传输方式 get和post method=”post“和method=”get”
    linux误删除恢复(未验证)
    web前端学习路线
  • 原文地址:https://www.cnblogs.com/itjeff/p/8295841.html
Copyright © 2011-2022 走看看