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

相关文章
|
8月前
|
存储 安全
☻ 我见我思之hvv偷师学艺——目录遍历/路径遍历/文件遍历 漏洞
介绍了网络告警信息的价值,特别是与目录遍历漏洞相关。目录遍历漏洞允许攻击者访问非预期的文件和目录。关键点包括: - 源IP可能是代理,可查威胁情报以了解历史攻击。 - 目的IP和端口用于识别受影响的资产。 - 响应码(如200或4XX/5XX)指示攻击是否成功。 - HTTP信息中的"../"是攻击特征,用于尝试遍历目录。 - 攻击者利用"../"构造请求,试图访问系统敏感文件。 - 防守方应警惕含有"../"的请求,可能是目录遍历尝试。 - 攻击方则利用路径参数尝试遍历,若未过滤"../",则可能成功利用漏洞。
|
9月前
|
Java 大数据 数据处理
获取到数据循环写文件
这段代码是一个Java方法,用于分批处理数据。它定义了初始值和每批处理的数量,然后通过`PageInfo`对象获取数据。如果总数小于1,则直接返回空列表。否则,循环处理数据,防止环境中的多次空跳过,并在处理完一批数据后更新页码。代码中还提到,这个过程可以用于减少大数据操作带来的风险。此外,配有一张动图,可能表示数据处理的过程。
56 1
|
9月前
使用递归的方式删除菜单
使用递归的方式删除菜单
49 1
|
9月前
|
弹性计算 运维 Shell
遍历当前目录文件并执行检查
【4月更文挑战第30天】
63 0
|
Java
IO案例,集合到文件数据排序、复制单级和多级文件夹及复制文件的异常处理
IO案例,集合到文件数据排序、复制单级和多级文件夹及复制文件的异常处理的简单示例
85 1
C#编程-29:循环访问目录树
C#编程-29:循环访问目录树
C#编程-18:遍历某一路径下所有文件和文件夹
C#编程-18:遍历某一路径下所有文件和文件夹
544 0
|
XML Java 数据格式
SMB使用递归方式下载、删除远程服务器文件(包含带有子文件夹等)
SMB(Server Message Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议。SMB 是在会话层(session layer)和表示层(presentation layer)以及小部分应用层(application layer)的协议。
466 0
递归删除指定文件-目录
递归删除指定文件-目录
135 0
自定义的删除函数,可以删除文件和递归删除文件夹
自定义的删除函数,可以删除文件和递归删除文件夹
171 0