c#遍历文件夹

//得到该文件夹下的符合条件的文件个数和大小

private void button1_Click(object sender, System.EventArgs e)
  {
   try
   {
    //得到路径
    string pathtext=filepath.Text.Trim();
    //得到时间
    string filetime=dateTimePicker1.Value.ToShortDateString();
    string filetimestr=filetime+" "+"00:00:00";
    DateTime getFileTime=DateTime.Parse(filetimestr);
    //得到的路径不能为空
    if(pathtext==null||pathtext.Equals(""))
    {
     MessageBox.Show("路径不能为空","错误");
    }
    else
    {
     
     //得到文件名,目录
     string[] filename=Directory.GetFiles(pathtext);
     //初始化文件计数器
     int a=0;
     //初始化文件大小
     long j=0;
     //打开等待窗口
     Sousuo ss=new Sousuo();
     ss.Show();
     //遍历文件夹
     foreach(string file in filename)
     {
      //得到文件的创建时间
      DateTime CreationTime=File.GetCreationTime(file);
      //得到符合条件的文件,某个时间段之前的文件
      if(getFileTime>CreationTime)
      {
       //得到文件的大小
       FileInfo f=new FileInfo(file);
       long len=f.Length;
       j=j+len;
       a++;
      }
     }
     //关闭窗口
     ss.Close();
     num.Text=a.ToString();//输出个数
     i=a;
     long x=j/1024/1024;
     filelen.Text=x.ToString();//得到大小
     button2.Enabled=true;
     MessageBox.Show("搜索完毕!","系统提示");
    }
   }
   catch{
   MessageBox.Show("请检查路径是否正确","系统提示");
   }

//遍历文件夹,把符合条件的文件删除

//删除按钮
  private void button2_Click(object sender, System.EventArgs e)
  {
   if(MessageBox.Show("确实要删除该文件么?","系统提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes)
   {
    //得到路径
    string pathtext=filepath.Text.Trim();
    //得到时间
    string filetime=dateTimePicker1.Value.ToShortDateString();
    string filetimestr=filetime+" "+"00:00:00";
    DateTime getFileTime=DateTime.Parse(filetimestr);
    //得到的路径不能为空
    if(pathtext==null||pathtext.Equals(""))
    {
     MessageBox.Show("路径不能为空","错误");
    }
    else
    {
     //得到文件名,目录
     string[] filename=Directory.GetFiles(pathtext);
     //进度条显示,得到文件数量
     progressBar1.Maximum=i;
     progressBar1.Minimum=0;
     //遍历文件夹
     foreach(string file in filename)
     {
      //得到文件的创建时间
      DateTime CreationTime=File.GetCreationTime(file);
      //得到符合条件的文件
      if(getFileTime>CreationTime)
      {
      //删除
       File.Delete(file);
       progressBar1.Step=10;
       progressBar1.PerformStep();
      }
     }
     MessageBox.Show("文件删除完毕!","系统提示");
    }

   }
   else{
   
   }
  }
 

### C# 中使用 `Directory` 类遍历文件夹C# 中,可以通过 `System.IO.Directory` 和 `System.IO.File` 类来操作文件和目录。以下是几种常见的方法来实现文件夹遍历功能。 #### 方法一:使用 `Directory.GetDirectories()` 和 `Directory.GetFiles()` 这种方法适用于简单的场景,能够逐层递归访问文件夹及其内部文件: ```csharp using System; using System.IO; class Program { static void Main() { string folderPath = @"C:\Your\FolderPath"; // 替换为目标文件夹路径 foreach (string directory in Directory.GetDirectories(folderPath, "*", SearchOption.AllDirectories)) { Console.WriteLine($"正在处理目录: {directory}"); foreach (string file in Directory.GetFiles(directory)) { Console.WriteLine($"\t找到文件: {file}"); // 输出每个文件路径 } } } } ``` 上述代码展示了如何通过 `SearchOption.AllDirectories` 参数递归地获取所有子目录中的文件[^1]。 --- #### 方法二:使用 `DirectoryInfo` 类 `DirectoryInfo` 是 .NET 提供的一个更灵活的对象模型,允许开发者以面向对象的方式管理目录结构。下面是一个示例: ```csharp using System; using System.IO; class Program { static void Main() { string path = @"C:\Your\FolderPath"; // 替换为目标文件夹路径 DirectoryInfo dir = new DirectoryInfo(path); if (!dir.Exists) { throw new DirectoryNotFoundException("指定的目录不存在!"); } TraverseDirectory(dir); } private static void TraverseDirectory(DirectoryInfo directory) { try { FileInfo[] files = directory.GetFiles(); foreach (FileInfo file in files) { Console.WriteLine(file.FullName); // 打印文件全路径 } DirectoryInfo[] subDirs = directory.GetDirectories(); foreach (DirectoryInfo subdir in subDirs) { TraverseDirectory(subdir); // 递归调用继续深入子目录 } } catch (Exception ex) { Console.WriteLine(ex.Message); } } } ``` 此代码片段说明了如何利用 `DirectoryInfo` 对象逐一访问目标文件夹内的文件以及其所有的子文件夹[^2]。 --- #### 方法三:自定义递归函数 如果需要更高的灵活性或者特定逻辑控制,可以编写自己的递归算法。例如: ```csharp using System; using System.Collections.Generic; using System.IO; public class FileTraversalExample { public static Dictionary<string, List<string>> OverDirectories(string rootDir) { var result = new Dictionary<string, List<string>>(); if (Directory.Exists(rootDir)) { ProcessDirectory(rootDir, result); } return result; } private static void ProcessDirectory(string targetDir, Dictionary<string, List<string>> results) { try { // 获取当前目录下的所有文件 string[] files = Directory.GetFiles(targetDir); foreach (string fileName in files) { if (!results.ContainsKey(targetDir)) results[targetDir] = new List<string>(); results[targetDir].Add(fileName); } // 获取当前目录下的所有子目录并递归处理 string[] directories = Directory.GetDirectories(targetDir); foreach (string directoryName in directories) { ProcessDirectory(directoryName, results); } } catch (UnauthorizedAccessException e) { Console.WriteLine(e.Message); } } public static void Main() { string startLocation = @"C:\Your\Start\Folder"; var allFilesByDirectory = OverDirectories(startLocation); foreach (var kvp in allFilesByDirectory) { Console.WriteLine($"目录: {kvp.Key}"); foreach (var file in kvp.Value) { Console.WriteLine($"\t{file}"); } } } } ``` 该方法提供了一种更加模块化的方式来存储和展示数据,并支持按需扩展更多特性[^3]。 --- ### 总结 以上三种方式分别适合不同的需求层次: - 如果只是简单地列举文件,则可以直接采用 **方法一**; - 若希望获得更强的可读性和维护性,推荐使用 **方法二** 的 `DirectoryInfo` 方式; - 当项目复杂度较高或有特殊定制要求时,可以选择构建专属解决方案如 **方法三**。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值