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

举报
彭世瑜 发表于 2021/08/14 00:54:13 2021/08/14
【摘要】 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace FileClass {     class Progra...
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

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/81048982

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。