如何筛选100MB以下文件并执行条件操作(含代码疑问)
如何筛选100MB以下的文件并执行删除操作?
我来帮你捋捋这个问题~你现在的代码有两个关键问题需要修正,先给你指出来,再给你完整的实现方案:
你的现有代码的问题
- 变量顺序错误:你先创建了
FileInfo对象引用file变量,但这个变量是之后才定义的,编译肯定会报错,得先有文件路径再去获取文件信息。 - 字节数换算错误:
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
相关产品推荐
相关产品推荐

