C#扩展方法实现文件大小格式化获取

南乔
南乔
发布时间:2026-10-13| 6人浏览过
原创

在C#开发中,直接获取文件大小的字节数往往不够直观。通过为FileInfo类编写扩展方法,可以自动将原始字节转换为更友好的格式化字符串(如 KB、MB、GB),同时支持异常处理,提升代码复用性和可读性。

功能目标与准备

本方案旨在提供一个静态扩展方法 GetFileSize,该方法挂载于 System.IO.FileInfo 对象上。操作结果是将文件的长度(字节)转换为最高单位的十进制表示,并限制最多两位小数。例如:输入 1073741824 字节,返回 "1 GB";输入 51200 字节,返回 "50 KB"。

使用此扩展方法需满足以下条件:

  • C# 项目引用了 System.IO 命名空间。
  • 扩展方法所在的类必须是 public static。
  • 扩展方法的定义必须与调用 FileInfo 实例的类位于同一个命名空间中(或者在使用方显式 using 该扩展类所在的命名空间)。

第1步:实现扩展方法代码

目的:创建核心逻辑,包含单位换算与安全异常捕获。

入口/位置:在项目中新建一个公共静态类(或在现有静态工具类中添加),放入以下代码:

/// <summary>
/// Gets a files formatted size.
/// </summary>
/// <param name="file">The file to return size of.</param>
/// <returns>Formatted string like '1.5 GB' or '100 B'.</returns>
public static string GetFileSize(this FileInfo file)
{
 try
 {
  //determine all file sizes
  double sizeinbytes = file.Length;
  double sizeinkbytes = Math.Round((sizeinbytes / 1024));
  double sizeinmbytes = Math.Round((sizeinkbytes / 1024));
  double sizeingbytes = Math.Round((sizeinmbytes / 1024));
  if (sizeingbytes > 1)
   return string.Format("{0} GB", sizeingbytes);
   //returns size in gigabytes
  else if (sizeinmbytes > 1)
   return string.Format("{0} MB", sizeinmbytes);
   //returns size in megabytes if less than one gigabyte
  else if (sizeinkbytes > 1)
   return string.Format("{0} KB", sizeinkbytes);
   //returns size in kilabytes if less than one megabyte
  else
   return string.Format("{0} B", sizeinbytes);
   //returns size in bytes if less than one kilabyte
 }
 catch { return "Error Getting Size"; }
 //catches any possible error and just returns error getting size
}

第2步:验证操作结果

完成状态判断:确保编译无误且能调用该方法。

在任何使用 System.IO 的文件中,实例化 FileInfo 后即可直接调用:
var info = new FileInfo(@"path");
string formatted = info.GetFileSize();

若文件路径无效或无权限访问,由于代码中包含 try-catch 结构,方法将返回字符串 "Error Getting Size" 而非抛出未处理异常,这提供了基础的容错能力。

注意事项与局限

原文逻辑使用了四舍五入后的整数进行比较(如 sizeinkbytes > 1)。对于极接近边界值的文件大小,显示的单位可能存在进位跳跃现象(例如刚好 1024 字节会被算作 1 KB,而 1023 字节被算作 1023 B)。若需要精确到两位小数的连续缩放显示,建议改用循环除法判断阈值的方法。

以上就是C#基于Extension Method(扩展方法)获得文件大小格式的详细内容,更多关于C#扩展方法与IO操作技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。