美文网首页
C# Directory 遍历文件夹

C# Directory 遍历文件夹

作者: super41 | 来源:发表于2021-03-23 17:44 被阅读0次
    前言:编辑器拓展常常要访问到文件目录。所以文件相关的操作挺重要的。这里记录下遍历目录的方法:
    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);
                    }
                }
            }
    

    相关文章

      网友评论

          本文标题:C# Directory 遍历文件夹

          本文链接:https://www.haomeiwen.com/subject/gpgfhltx.html