C#编程-29:循环访问目录树

简介: C#编程-29:循环访问目录树

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

相关文章
|
6月前
|
算法 Linux C语言
【Linux系统编程】深入理解Linux目录操作:文件夹位置指针操作函数(telldir,seekdir,rewinddir)
【Linux系统编程】深入理解Linux目录操作:文件夹位置指针操作函数(telldir,seekdir,rewinddir)
74 0
|
6月前
如何把多个文件(夹)向下移动1层(在复制前或后进行)
本文介绍了一个文件批量复制工具的使用方法。首先,提供了两个下载链接:百度网盘(提取码:qwu2)和蓝奏云(提取码:2r1z)。接着,展示了文件夹结构,包含4个编号的子文件夹,每个都含兔兔图片。然后,打开工具并切换到“文件批量复制”功能,将文件夹导入并整理,去除编号文件夹的路径。通过设置命名格式,可以选择“*来源名*”或“*来上名*”进行文件夹重命名。在实际操作中,演示了这两种方式的结果,前者创建了20个以图片名为名的文件夹,后者则将所有图片归入4个以原始文件夹名为名的文件夹中。此外,还提到了使用提取方法自定义命名的选项。最后,强调了该工具的灵活性,可以结合多种命名规则满足不同需求。
|
6月前
|
Java 大数据 数据处理
获取到数据循环写文件
这段代码是一个Java方法,用于分批处理数据。它定义了初始值和每批处理的数量,然后通过`PageInfo`对象获取数据。如果总数小于1,则直接返回空列表。否则,循环处理数据,防止环境中的多次空跳过,并在处理完一批数据后更新页码。代码中还提到,这个过程可以用于减少大数据操作带来的风险。此外,配有一张动图,可能表示数据处理的过程。
43 1
|
6月前
使用递归的方式删除菜单
使用递归的方式删除菜单
32 1
|
6月前
|
弹性计算 运维 Shell
遍历当前目录文件并执行检查
【4月更文挑战第30天】
43 0
|
Linux 编译器 C语言
关于文件的操作
关于文件的操作
|
C语言 C++
对文件的各种操作详解 1
对文件的各种操作详解
|
C语言
对文件的各种操作详解 3
对文件的各种操作详解
C#编程-29:循环访问目录树
C#编程-29:循环访问目录树
C#编程-18:遍历某一路径下所有文件和文件夹
C#编程-18:遍历某一路径下所有文件和文件夹
515 0