C#实现获取文件大小、格式转换及比较
在C#应用开发中,经常需要读取文件属性并进行大小判断或展示。本文将介绍如何使用System.IO命名空间下的FileInfo类获取文件大小,并封装一个工具类来实现字节的智能格式转换(如KB/MB/GB)以及灵活的比较逻辑,包括与固定值对比和两个文件之间的相互比较。
结果与目标
通过该方案,开发者可以解决以下问题:
GetFileSize:准确获取文件的字节数(long类型)。ConvertFileSize:将原始字节转换为人类可读的字符串(Byte/KB/MB/GB/TB),根据数值大小自动选择最佳单位。ConvertFileSizeTo...:将字节统一换算为特定单位(KB、MB或GB)的双精度数值,便于后续计算。CompareFileSize:将单个文件的大小与设定阈值进行方向性比较(大于、小于等)。CompareTwoFileSize:直接比较两个FileInfo对象所代表文件的大小关系。
准备条件
确保项目引用了System.IO命名空间,并具备访问目标文件的权限。代码示例中使用了自定义枚举CompareFileDir来定义比较方向。
核心实现代码
以下代码展示了完整的工具类FileOPC及其依赖的枚举定义。你可以将其直接添加到项目的Kernal命名空间下使用。
using System;
using System.IO;
namespace Kernal
{
public class FileOPC
{
/// <summary>
/// 获取到文件的大小
/// </summary>
/// <param name="fileInfo">文件信息</param>
/// <returns>返回文件的大小(单位是字节)</returns>
public static long GetFileSize(FileInfo fileInfo)
{
return fileInfo.Length;
}
/// <summary>
/// 将文件大小(字节)转换为最适合的显示方式
/// </summary>
/// <param name="size">文件字节</param>
/// <returns>返回转换后的字符串</returns>
public static string ConvertFileSize(long size)
{
string result = "0KB";
// 通过字符串长度判断大致量级:
// <4位:<1000 Byte
// <7位:<1000 KB (1MB)
// <10位:<1000 MB (1GB)
// <13位:<1000 GB (1TB)
int filelength = size.ToString().Length;
if (filelength < 4)
result = size + "byte";
else if (filelength < 7)
result = Math.Round(Convert.ToDouble(size / 1024d), 2) + "KB";
else if (filelength < 10)
result = Math.Round(Convert.ToDouble(size / 1024d / 1024), 2) + "MB";
else if (filelength < 13)
result = Math.Round(Convert.ToDouble(size / 1024d / 1024 / 1024), 2) + "GB";
else
result = Math.Round(Convert.ToDouble(size / 1024d / 1024 / 1024 / 1024), 2) + "TB";
return result;
}
/// <summary>
/// 将文件大小(字节)统一转换为K为单位
/// </summary>
public static double ConvertFileSizeToK(long size)
{
double result = 0;
if (size > 0)
{
result = Math.Round(Convert.ToDouble(size / 1024d), 2);
}
return result;
}
/// <summary>
/// 将文件大小(字节)统一转换为M为单位
/// </summary>
public static double ConvertFileSizeToM(long size)
{
double result = 0;
if (size > 0)
{
result = Math.Round(Convert.ToDouble(size / 1024d / 1024), 2);
}
return result;
}
/// <summary>
/// 将文件大小(字节)统一转换为G为单位
/// </summary>
public static double ConvertFileSizeToG(long size)
{
double result = 0;
if (size > 0)
{
result = Math.Round(Convert.ToDouble(size / 1024d / 1024 / 1024), 2);
}
return result;
}
/// <summary>
/// 将所有文件与设置的数值比较文件的大小
/// </summary>
/// <param name="fileInfo">当前的文件信息</param>
/// <param name="curSetFileSize">当前设置的文件大小(单位:M)</param>
/// <param name="compareFileDir">比较方向枚举</param>
/// <returns>返回比较的结果(true:表示满足条件)</returns>
public static bool CompareFileSize(FileInfo fileInfo, double curSetFileSize, CompareFileDir compareFileDir)
{
bool success = false;
// 注意:此处内部统一转为MB进行比较
double curFileSize = FileOPC.ConvertFileSizeToM(fileInfo.Length);
switch (compareFileDir)
{
case CompareFileDir.大于:
if (curFileSize > curSetFileSize)
success = true;
break;
case CompareFileDir.小于:
if (curFileSize < curSetFileSize)
success = true;
break;
case CompareFileDir.等于:
if (curFileSize == curSetFileSize)
success = true;
break;
case CompareFileDir.大于等于:
if (curFileSize >= curSetFileSize)
success = true;
break;
case CompareFileDir.小于等于:
if (curFileSize <= curSetFileSize)
success = true;
break;
}
return success;
}
/// <summary>
/// 比较两个文件的大小
/// </summary>
/// <param name="fileInfo1">第一个文件</param>
/// <param name="fileInfo2">第二个文件</param>
/// <param name="compareFileDir">比较方向枚举</param>
/// <returns>返回比较的结果(true:表示满足条件)</returns>
public static bool CompareTwoFileSize(FileInfo fileInfo1, FileInfo fileInfo2, CompareFileDir compareFileDir)
{
bool success = false;
// 内部统一转为MB进行比较
double curFile1Size = FileOPC.ConvertFileSizeToM(fileInfo1.Length);
double curFile2Size = FileOPC.ConvertFileSizeToM(fileInfo2.Length);
switch (compareFileDir)
{
case CompareFileDir.大于:
if (curFile1Size > curFile2Size)
success = true;
break;
case CompareFileDir.小于:
if (curFile1Size < curFile2Size)
success = true;
break;
case CompareFileDir.等于:
if (curFile1Size == curFile2Size)
success = true;
break;
case CompareFileDir.大于等于:
if (curFile1Size >= curFile2Size)
success = true;
break;
case CompareFileDir.小于等于:
if (curFile1Size <= curFile2Size)
success = true;
break;
}
return success;
}
}
//比较文件的方向
public enum CompareFileDir
{
大于, //大于
小于, //小于
等于, //等于
大于等于, // 大于等于
小于等于 //小于等于
}
}
使用方法
在需要使用该类的项目中,首先引入命名空间:
using Kernal;
第1步:初始化文件对象
使用FileInfo类获取目标文件的元数据,这是所有操作的基础。
入口:System.IO.FileInfo
动作:
FileInfo file = new FileInfo(@"D:\Test\sample.mp4");
第2步:执行大小转换或比较
调用静态方法即可完成相应业务逻辑。例如,获取友好显示文本:
动作:
string displaySize = FileOPC.ConvertFileSize(file.Length);
或者比较文件是否超过指定容量(例如100MB):
动作:
bool isLarge = FileOPC.CompareFileSize(file, 100.0, CompareFileDir.大于);
完成判断
- 显示成功:
ConvertFileSize返回类似"15.23MB"的字符串。 - 比较准确:
CompareFileSize在输入参数正确时,返回布尔值true或false指示是否满足条件。
以上就是C#实现获取文件大小并进行比较的详细内容,更多关于C#文件操作与工具类开发的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













