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

相关文章
|
算法 前端开发 UED
封装一个快速生成目录树的全局脚本
封装一个快速生成目录树的全局脚本
105 0
|
5月前
|
Go
查看每个子文件当中第一个文件
【10月更文挑战第9天】查看每个子文件当中第一个文件 。
50 3
|
10月前
|
算法 Linux C语言
【Linux系统编程】深入理解Linux目录操作:文件夹位置指针操作函数(telldir,seekdir,rewinddir)
【Linux系统编程】深入理解Linux目录操作:文件夹位置指针操作函数(telldir,seekdir,rewinddir)
122 0
|
9月前
|
存储 安全
☻ 我见我思之hvv偷师学艺——目录遍历/路径遍历/文件遍历 漏洞
介绍了网络告警信息的价值,特别是与目录遍历漏洞相关。目录遍历漏洞允许攻击者访问非预期的文件和目录。关键点包括: - 源IP可能是代理,可查威胁情报以了解历史攻击。 - 目的IP和端口用于识别受影响的资产。 - 响应码(如200或4XX/5XX)指示攻击是否成功。 - HTTP信息中的"../"是攻击特征,用于尝试遍历目录。 - 攻击者利用"../"构造请求,试图访问系统敏感文件。 - 防守方应警惕含有"../"的请求,可能是目录遍历尝试。 - 攻击方则利用路径参数尝试遍历,若未过滤"../",则可能成功利用漏洞。
|
10月前
如何把多个文件(夹)向下移动1层(在复制前或后进行)
本文介绍了一个文件批量复制工具的使用方法。首先,提供了两个下载链接:百度网盘(提取码:qwu2)和蓝奏云(提取码:2r1z)。接着,展示了文件夹结构,包含4个编号的子文件夹,每个都含兔兔图片。然后,打开工具并切换到“文件批量复制”功能,将文件夹导入并整理,去除编号文件夹的路径。通过设置命名格式,可以选择“*来源名*”或“*来上名*”进行文件夹重命名。在实际操作中,演示了这两种方式的结果,前者创建了20个以图片名为名的文件夹,后者则将所有图片归入4个以原始文件夹名为名的文件夹中。此外,还提到了使用提取方法自定义命名的选项。最后,强调了该工具的灵活性,可以结合多种命名规则满足不同需求。
|
10月前
使用递归的方式删除菜单
使用递归的方式删除菜单
52 1
|
10月前
|
弹性计算 运维 Shell
遍历当前目录文件并执行检查
【4月更文挑战第30天】
73 0
|
Java
IO案例,集合到文件数据排序、复制单级和多级文件夹及复制文件的异常处理
IO案例,集合到文件数据排序、复制单级和多级文件夹及复制文件的异常处理的简单示例
89 1
有点玄学,虽然不知道为什么第一个工程配置文件的资源放到某个位置,建立第一个工程时也是同样放到那个位置,就配置文件内容不断报错了
有点玄学,虽然不知道为什么第一个工程配置文件的资源放到某个位置,建立第一个工程时也是同样放到那个位置,就配置文件内容不断报错了
441 0
有点玄学,虽然不知道为什么第一个工程配置文件的资源放到某个位置,建立第一个工程时也是同样放到那个位置,就配置文件内容不断报错了
C#编程-29:循环访问目录树
C#编程-29:循环访问目录树
104 0