C# Directory 遍历文件夹

前言:编辑器拓展常常要访问到文件目录。所以文件相关的操作挺重要的。这里记录下遍历文件的方法

1. 先列举下会用到的类

- **FileInfo** : 文件类(不包括目录)
- **DirectoryInfo** : 目录类
- **FileSystemInfo** :通用文件类,可以是文件,也可以是目录。
       可以通过FileSystemInfo.Attributes 来判断是不是目录:
       bool isDir = fileSystemInfo.Attributes == FileAttributes.Directory;

2. 遍历目录里的所有文件

获取一个目录里的所有文件

 public void AccessAllFile(string dirPath)
 {
   DirectoryInfo directoryInfo = new DirectoryInfo(dirPath);
   //SearchOption.AllDirectories 代表遍历子文件夹。
   //SearchOption.TopDirectoryOnly 或 不加参数 则只访问第一层文件
   FileInfo[] fileInfos = directoryInfo.GetFiles("*", SearchOption.AllDirectories);
   for (int i = 0; i < fileInfos.Length; i++)
   {
       Log.Debug($"name:{fileInfos[i].Name}");
   }
 }

获取一个目录里的所有文件夹

        public void AccessAllDir(string dirPath)
        {
            DirectoryInfo directoryInfo = new DirectoryInfo(dirPath);
            DirectoryInfo[] dirInfos = directoryInfo.GetDirectories("*", SearchOption.AllDirectories);
            for (int i = 0; i < dirInfos.Length; i++)
            {
                Log.Debug($"name:{dirInfos[i].Name}");
            }
        }

获取一个目录的的所有文件夹和文件(方法1)

        public void AccessAllFileAndDir(string dirPath)
        {
            DirectoryInfo directoryInfo = new DirectoryInfo(dirPath);
            FileSystemInfo[] fileSystemInfos = directoryInfo.GetFileSystemInfos("*",SearchOption.AllDirectories);
            for (int i = 0; i < fileSystemInfos.Length; i++)
            {
                var file = fileSystemInfos[i];
                Log.Debug($"isDir:{file.Attributes == FileAttributes.Directory} name:{file.Name}");
            }
        }

获取一个目录的的所有文件夹和文件(方法2:自己递归)

        public void AccessAllFileAndDir2(string dirPath)
        {
            DirectoryInfo directoryInfo = new DirectoryInfo(dirPath);
            FileSystemInfo[] fileSystemInfos = directoryInfo.GetFileSystemInfos();
            for (int i = 0; i < fileSystemInfos.Length; i++)
            {
                var fileSystemInfo = fileSystemInfos[i];
                bool isDir = fileSystemInfo.Attributes == FileAttributes.Directory;
                if (isDir)
                {
                    Debug.Log($"dir name:{fileSystemInfo.Name}");
                    AccessAllFileAndDir2(fileSystemInfo.FullName);
                }
                else
                {
                    Debug.Log($"file name:{fileSystemInfo.Name}");
                }
            }
        }
  • 最后,附上一个删除目录里所有文件的方法,让一切归于平静…
        public void DeleteAllFile(string dir)
        {
            DirectoryInfo directoryInfo = new DirectoryInfo(dir);
            FileSystemInfo[] fileSystemInfos = directoryInfo.GetFileSystemInfos();
            for (int i = 0; i < fileSystemInfos.Length; i++)
            {
                FileSystemInfo file = fileSystemInfos[i];
                bool isDir = file.Attributes == FileAttributes.Directory;
                if (isDir)
                {
                    Directory.Delete(file.FullName,true);
                }
                else
                {
                    File.Delete(file.FullName);
                }
            }
        }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值