C#扩展方法实现文件大小格式化获取
在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操作技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









