C#编程-29:循环访问目录树_彭世瑜_新浪博客

76 阅读1分钟

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

\

namespace FileClass

{

    class Program

    {

        static System.Collections.Specialized.StringCollection log = new System.Collections.Specialized.StringCollection();

        static void Main(string[] args)

        {

            //获取逻辑分区

            string[] drives = System.Environment.GetLogicalDrives();

            foreach (string d in drives)

            {

                System.IO.DriveInfo di=new System.IO.DriveInfo(d);

               

                //排除

                if (!di.IsReady)

                {

                    Console.WriteLine("drive is not ready:{0}",di);

                    continue;

                }

              

                    Console.WriteLine("drive is ready:{0}", di);

                    DirectoryInfo dirRoot = di.RootDirectory;

                    WalkDirectoryTree(dirRoot);

\

\

               

            }

            Console.WriteLine("exception:");

            foreach (string s in log)

            {

                Console.WriteLine(s);

                StreamWriter writer = new StreamWriter(@"C:\Users\PSY\Desktop\list.txt", true, Encoding.Default);

                writer.WriteLine(s);

                writer.Close();

            }

            Console.ReadKey();

        }

\

        ///

        /// 遍历文件夹

        ///

        ///

        public static void WalkDirectoryTree(System.IO.DirectoryInfo root)

        {

            System.IO.FileInfo[] files = null;

            System.IO.DirectoryInfo[] subDirs = null;

            try

            {

                files = root.GetFiles("*.*");

            }

            catch (UnauthorizedAccessException e)

            {

                log.Add(e.Message);

                

            }

            catch(DirectoryNotFoundException e)

\

            {

                Console.WriteLine(e.Message);

            }

            if (files != null)

            {

                foreach (FileInfo fi in files)

                {

                    Console.WriteLine(fi.FullName);

                    StreamWriter writer = new StreamWriter(@"C:\Users\PSY\Desktop\list.txt",true,Encoding.Default);

\

                    writer.WriteLine(fi.FullName);

                    writer.Close();

                }

                //递归调用

                subDirs = root.GetDirectories();

                foreach (DirectoryInfo dirInfo in subDirs)

                {

                    WalkDirectoryTree(dirInfo);

                }

            }

\

        }

    }

}

\

关键笔记:

1、获取本机逻辑分区:

string[] drives = System.Environment.GetLogicalDrives();

\

2、获取所有文件:(DirectoryInfo dir)

FileInfo[] fileInfo = dir.GetFiles();

\

3、获取所有目录:(DirectoryInfo dir)

 DirectoryInfo[] directoryInfo = dir.GetDirectories();

\

参考链接:docs.microsoft.com/zh-cn/dotne…