You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选100MB以下文件并执行条件操作(含代码疑问)

如何筛选100MB以下的文件并执行删除操作?

我来帮你捋捋这个问题~你现在的代码有两个关键问题需要修正,先给你指出来,再给你完整的实现方案:

你的现有代码的问题

  1. 变量顺序错误:你先创建了FileInfo对象引用file变量,但这个变量是之后才定义的,编译肯定会报错,得先有文件路径再去获取文件信息。
  2. 字节数换算错误:12345字节才十几KB,远小于100MB,正确的100MB对应的字节数应该是 100 * 1024 * 1024 = 104857600(如果是按二进制的MB计算,也就是通常系统里的MB标准),如果是按十进制的100MB(10010001000)就是100000000,根据你的需求选一个就行,一般推荐用二进制的换算更贴合系统显示的文件大小。

正确的实现代码

下面是一个完整的示例,能扫描指定目录下的所有文件,筛选出100MB以下的文件并删除,还加了异常处理避免程序崩溃:

using System.IO;

// 定义100MB对应的字节数(二进制换算:1MB=1024KB,1KB=1024字节)
const long MaxFileSizeInBytes = 100 * 1024 * 1024;
// 替换成你要扫描的目录路径
string targetDirectory = @"C:\Your\Target\Directory";

// 遍历目录下的所有文件(EnumerateFiles比GetFiles更高效,适合大目录)
foreach (string filePath in Directory.EnumerateFiles(targetDirectory))
{
    try
    {
        FileInfo fileInfo = new FileInfo(filePath);
        // 判断文件大小是否小于等于100MB
        if (fileInfo.Length <= MaxFileSizeInBytes)
        {
            File.Delete(filePath);
            Console.WriteLine($"已删除文件:{filePath}");
        }
        else
        {
            Console.WriteLine($"文件过大,跳过删除:{filePath}");
        }
    }
    catch (IOException ex)
    {
        // 处理文件被占用、权限不足等异常
        Console.WriteLine($"处理文件时出错:{filePath},错误信息:{ex.Message}");
    }
    catch (UnauthorizedAccessException ex)
    {
        Console.WriteLine($"没有权限访问文件:{filePath},错误信息:{ex.Message}");
    }
}

关键要点说明

  • 高效遍历文件:用Directory.EnumerateFiles而不是Directory.GetFiles,前者会逐个返回文件路径,不会一次性把所有文件加载到内存里,适合目录里文件很多的情况。
  • 常量定义提升可读性:把100MB的字节数定义成常量,后续要调整大小(比如改成50MB)直接改常量值就行,不用去计算字节数。
  • 异常处理:删除文件时很可能遇到文件被其他程序占用、没有权限、文件已经被删除等情况,加上try-catch能让程序更健壮,不会因为单个文件的问题导致整个扫描中断。

内容的提问来源于stack exchange,提问作者Arie Kolmteistov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:25:07