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

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

在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 相关产品和应用

全部下载

专题列表