C#实现获取文件大小、格式转换及比较

晚来风
晚来风
发布时间:2026-10-15| 4人浏览过
原创

在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#文件操作与工具类开发的资料请关注本站其它相关文章!

相关标签:

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

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 算法库。