菜鸟的问题
好记性不如烂笔头~。~

1.具体操作包括:

 ①.获取指定文件夹目录下所有文件的完整路径

 ②.获取文件夹下所有文件的完整路径(包括子文件夹)

 ③.获取文件夹下指定后缀文件的所有

 ④.获取文件夹下指定后缀文件的所有(包括子文件夹)

2.完整代码

using log4net;
using log4net.Config;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DirPathFile
{
    class Program
    {
        static void Main(string[] args)
        {

            InitLog4net();
            var log = LogManager.GetLogger(typeof(Program));

            // excel命名
            //string PathExcel = $"{Guid.NewGuid().ToString()}.xlsx";

            #region 获取指定文件夹下所有文件的完整路径
            // 得到源目录的文件列表,该里面是包含文件以及目录路径的一个数组
            //string strPathp = @"E:\1\";
            //DirectoryInfo infor = new DirectoryInfo(strPathp);
            //string[] fileList = Directory.GetFileSystemEntries(strPathp);
            //foreach (string item in fileList)
            //{
            //    FileInfo fi = new FileInfo(item);
            //    if (fi.Extension != " ") // 获取路径下的所有文件路径
            //    {
            //        Console.WriteLine(fi.FullName);
            //    }
            //}
            //Console.WriteLine($"当前获取到的文件总数:{GetFilesCount(infor)}");
            //Console.ReadKey();
            #endregion

            #region 获取文件夹目录下所有文件的完整路径
            var strPaths = ConfigurationManager.AppSettings["dirPath"];
            List<FileInfo> lst = new List<FileInfo>();
            List<FileInfo> lstfiles = GetInfo(strPaths, lst);
            DirectoryInfo info = new DirectoryInfo(strPaths);
            foreach (FileInfo item in lstfiles)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine($"当前获取到的文件总数:{GetFilesCount(info)}");
            Console.ReadKey();
            #endregion

            #region 获取文件夹目录下所有文件的完整路径(包括子文件夹目录)
            //var strPaths = ConfigurationManager.AppSettings["dirPath"];
            //List<string> lst = GetInfoPath(strPaths);
            //DirectoryInfo DI = new DirectoryInfo(strPaths);
            //foreach (var item in lst)
            //{
            //    Console.WriteLine(item);
            //}
            //Console.WriteLine($"当前获取到的文件总数:{GetFilesCount(DI)}");
            //Console.ReadKey();
            #endregion

            #region 获取文件夹目录下指定后缀文件
            // 获取文件夹下的指定后缀文件
            //Console.WriteLine("--获取文件夹下的指定后缀文件--");
            //string strPath = @"E:\1\";
            //DirectoryInfo info = new DirectoryInfo(strPath);
            //List<FileInfo> lstfile = GetFile(strPath, ".jpg");
            //foreach (FileInfo item in lstfile)
            //{
            //    Console.WriteLine(item);
            //}

            //Console.WriteLine($"当前获取到的文件总数:{GetFilesCount(info)}");
            //Console.ReadKey();
            #endregion

            #region 获取文件夹目录下指定后缀文件(包括子文件夹)
            //获取文件夹与子文件夹下的指定后缀文件
            //log.Info("--获取文件夹与子文件夹下的指定后缀文件--");
            //var strPaths = ConfigurationManager.AppSettings["dirPath"];
            //List<FileInfo> lst = new List<FileInfo>();
            //List<FileInfo> lstfiles = GetFiles(strPaths, ".jpg", ref lst);
            //DirectoryInfo info = new DirectoryInfo(strPaths);
            //foreach (FileInfo item in lstfiles)
            //{
            //    log.Info(item);
            //}

            //log.InfoFormat("当前获取到的文件总数:{0}", GetFilesCount(info));
            //Console.ReadKey();
            #endregion


            #region directoryinfo与directory说明
            //1.directory是公开建立、移动和全面列举目录和子目录的静态方法。
            //2.directoryinfo是公开建立、移动和全面列举目录和子目录的执行个体(Instance) 方法。
            //3.一个是公用的静态类,一个是实例类
            #endregion

            #region 获取指定目录包含的文件和子目录
            // 1.DirectoryInfo.GetFiles():获取目录中(不包含子目录)的文件,返回类型为FileInfo[],支持通配符查找;
            // 2.DirectoryInfo.GetDirectories():获取目录(不包含子目录)的子目录,返回类型为DirectoryInfo[],支持通配符查找;
            // 3.DirectoryInfo.GetFileSystemInfos():获取指定目录下(不包含子目录)的文件和子目录,返回类型为FileSystemInfo[],支持通配符查找;
            #endregion

            #region 获取指定文件的基本信息
            //1.FileInfo.Exists:获取指定文件是否存在;
            //2.FileInfo.Name,FileInfo.Extensioin:获取文件的名称和扩展名;
            //FileInfo.FullName:获取文件的全限定名称(完整路径);
            //FileInfo.Directory:获取文件所在目录,返回类型为DirectoryInfo;
            //FileInfo.DirectoryName:获取文件所在目录的路径(完整路径);
            //FileInfo.Length:获取文件的大小(字节数);
            //FileInfo.IsReadOnly:获取文件是否只读;
            //FileInfo.Attributes:获取或设置指定文件的属性,返回类型为FileAttributes枚举,可以是多个值的组合
            //FileInfo.CreationTime、FileInfo.LastAccessTime、FileInfo.LastWriteTime:分别用于获取文件的创建时间、访问时间、修改时间;
            #endregion

        }

        #region 获取指定文件夹下的指定后缀文件

        /// <summary>
        /// 获取文件夹下的莫个后缀的所有文件
        /// </summary>
        /// <param name="path">文件路劲</param>
        /// <param name="ExtName">文件后缀</param>
        /// <returns></returns>
        public static List<FileInfo> GetFile(string path, string ExtName)
        {

            try
            {
                List<FileInfo> lst = new List<FileInfo>();
                string[] dir = Directory.GetDirectories(path);// 文件夹列表
                DirectoryInfo directoryInfo = new DirectoryInfo(path);
                FileInfo[] files = directoryInfo.GetFiles();
                if (files.Length != 0 || dir.Length != 0) // 当前目录文件或文件夹不能为空
                {
                    foreach (FileInfo f in files)
                    {
                        if (ExtName.ToLower().IndexOf(f.Extension.ToLower()) >= 0)
                        {
                            lst.Add(f);
                        }
                    }
                    foreach (string d in dir)
                    {
                        GetFile(d, ExtName);
                    }
                }
                return lst;
            }
            catch (Exception ex)
            {

                throw ex;

            }
        }
        #endregion

        #region 获取指定文件夹下的指定后缀文件后缀(包括获取子文件下的)

        /// <summary>
        /// 获取指定文件夹下的指定后缀文件后缀(包括获取子文件下的)
        /// </summary>
        /// <param name="path">文件夹路径</param>
        /// <param name="ExtName">文件后缀</param>
        /// <param name="lst"></param>
        /// <returns></returns>
        public static List<FileInfo> GetFiles(string path, string ExtName, ref List<FileInfo> lst)
        {

            try
            {
                //List<FileInfo> lst = new List<FileInfo>();
                string[] dir = Directory.GetDirectories(path);// 文件夹列表
                DirectoryInfo directoryInfo = new DirectoryInfo(path);
                FileInfo[] files = directoryInfo.GetFiles();
                if (files.Length != 0 || dir.Length != 0) // 当前目录文件或文件夹不能为空
                {
                    foreach (FileInfo f in files)
                    {
                        if (ExtName.ToLower().IndexOf(f.Extension.ToLower()) >= 0)
                        {
                            lst.Add(f);
                        }
                    }
                    foreach (string d in dir)
                    {
                        GetFiles(d, ExtName, ref lst);
                    }
                }
                return lst;
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }
        #endregion

        #region 获取文件夹下所有文件的完整路径
        /// <summary>
        /// 获取文件夹下所有文件的完整路径
        /// </summary>
        /// <param name="path">路径</param>
        /// <param name="lst">返回参数</param>
        /// <returns></returns>
        private static List<FileInfo> GetInfo(string path, List<FileInfo> lst)
        {
            try
            {
                //string[] dirInfo = Directory.GetDirectories(path);
                string[] fileList = Directory.GetFileSystemEntries(path);
                foreach (string item in fileList)
                {
                    FileInfo fi = new FileInfo(item);
                    if (fi.Extension != " ") // 获取路径下的所有文件路径
                    {
                        lst.Add(fi);
                    }
                   
                }
                return lst;
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }
        #endregion

        #region 获取文件夹下的所有文件的完整路径(包括子文件夹)
        
        static List<string> list = new List<string>();//定义list变量,存放获取到的路径
        /// <summary>
        /// 获取文件夹下的所有文件的完整路径(包括子文件夹)
        /// </summary>
        /// <param name="path">文件路径</param>
        /// <returns></returns>
        public static List<string> GetInfoPath(string path)
        {
            DirectoryInfo dir = new DirectoryInfo(path);
            FileInfo[] fil = dir.GetFiles();
            DirectoryInfo[] dii = dir.GetDirectories();
            foreach (FileInfo f in fil)
            {
                list.Add(f.FullName);//添加文件的路径到列表
            }

            //获取子文件夹内的文件列表,递归遍历
            foreach (DirectoryInfo d in dii)
            {
                GetInfoPath(d.FullName);
                list.Add(d.FullName);//添加文件夹的路径到列表
            }
            return list;
        }
        #endregion

        #region 获取当前目录下的文件总数
        /// <summary>
        /// 获取文件夹下的文件总数
        /// </summary>
        /// <param name="dirInfo"></param>
        /// <returns></returns>
        public static int GetFilesCount(DirectoryInfo dirInfo)
        {
            int totalFile = 0;
            totalFile += dirInfo.GetFiles().Length;
            foreach (DirectoryInfo f in dirInfo.GetDirectories())
            {
                totalFile += GetFilesCount(f);
            }
            return totalFile;
        }
        #endregion

        #region Log日志

        private static void InitLog4net()
        {
            var log = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "Log4net.config");
            XmlConfigurator.ConfigureAndWatch(log);
        }
        #endregion
    }
}
View Code

 

posted on 2019-10-16 17:26  ArSang-Blog  阅读(179)  评论(0编辑  收藏  举报