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();

参考链接:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/file-system/how-to-iterate-through-a-directory-tree