C#怎么获取文件的大小_C#如何使用FileInfo读取长度

来源:编程学习作者:小白龙头衔:草根站长
导读:本期聚焦于小伙伴创作的《C#怎么获取文件的大小_C#如何使用FileInfo读取长度》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#怎么获取文件的大小_C#如何使用FileInfo读取长度》有用,将其分享出去将是对创作者最好的鼓励。

在C#开发中,获取文件大小是一个常见的需求,比如做文件上传限制、存储空间统计等功能时都需要用到。FileInfo类是System.IO命名空间下专门用于封装文件相关属性的类,它的Length属性可以直接返回文件的字节数,是实现文件大小获取最便捷的方式。

C#怎么获取文件的大小_C#如何使用FileInfo读取长度

FileInfo类的基本使用

使用FileInfo获取文件大小的核心步骤很简单,首先需要创建FileInfo实例,传入目标文件的完整路径,然后直接访问实例的Length属性即可。Length属性的返回值是long类型,单位是字节。

下面是一个最基础的获取单个文件大小的示例代码:

using System;
using System.IO;

namespace FileSizeDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 目标文件的完整路径
            string filePath = @"D:testexample.txt";
            // 创建FileInfo实例
            FileInfo fileInfo = new FileInfo(filePath);
            // 判断文件是否存在,避免异常
            if (fileInfo.Exists)
            {
                // 获取文件大小,单位字节
                long fileSize = fileInfo.Length;
                Console.WriteLine($"文件大小:{fileSize} 字节");
            }
            else
            {
                Console.WriteLine("目标文件不存在");
            }
        }
    }
}

字节单位转换

直接使用字节数展示文件大小不够直观,通常需要转换成KB、MB、GB等常用单位。转换规则是1KB=1024字节,1MB=1024KB,1GB=1024MB,我们可以通过循环判断的方式实现自动转换。

单位转换的示例代码如下:

using System;

namespace FileSizeDemo
{
    class FileSizeHelper
    {
        /// <summary>
        /// 将字节数转换为可读的文件大小字符串
        /// </summary>
        /// <param name="bytes">字节数</param>
        /// <returns>转换后的字符串</returns>
        public static string FormatFileSize(long bytes)
        {
            string[] units = { "B", "KB", "MB", "GB", "TB" };
            int unitIndex = 0;
            double size = bytes;
            // 循环除以1024,直到数值小于1024或者达到最大单位
            while (size >= 1024 && unitIndex < units.Length - 1)
            {
                size /= 1024;
                unitIndex++;
            }
            // 保留两位小数点
            return $"{size:F2} {units[unitIndex]}";
        }
    }
}

结合之前的FileInfo代码,调用这个转换方法就可以得到直观的文件大小展示:

using System;
using System.IO;

namespace FileSizeDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            string filePath = @"D:testexample.txt";
            FileInfo fileInfo = new FileInfo(filePath);
            if (fileInfo.Exists)
            {
                long fileSize = fileInfo.Length;
                string formattedSize = FileSizeHelper.FormatFileSize(fileSize);
                Console.WriteLine($"文件大小:{formattedSize}");
            }
        }
    }
}

批量获取文件大小

如果需要获取某个目录下所有文件的大小,可以结合DirectoryInfo类的GetFiles方法,先获取目录下的所有文件,再遍历每个文件创建FileInfo实例获取大小。

批量获取文件大小的示例代码如下:

using System;
using System.IO;

namespace FileSizeDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 目标目录路径
            string directoryPath = @"D:test";
            DirectoryInfo directoryInfo = new DirectoryInfo(directoryPath);
            if (directoryInfo.Exists)
            {
                // 获取目录下所有文件,不包含子目录
                FileInfo[] files = directoryInfo.GetFiles();
                long totalSize = 0;
                foreach (FileInfo file in files)
                {
                    long fileSize = file.Length;
                    totalSize += fileSize;
                    string formattedSize = FileSizeHelper.FormatFileSize(fileSize);
                    Console.WriteLine($"文件:{file.Name},大小:{formattedSize}");
                }
                string totalFormatted = FileSizeHelper.FormatFileSize(totalSize);
                Console.WriteLine($"目录下所有文件总大小:{totalFormatted}");
            }
            else
            {
                Console.WriteLine("目标目录不存在");
            }
        }
    }
}

注意事项

  • 使用FileInfo之前一定要先判断文件是否存在,否则访问Length属性会抛出FileNotFoundException异常。
  • 如果文件正在被其他进程占用,可能无法正常读取文件信息,需要做好异常处理。
  • Length属性返回的是文件的真实大小,不包含文件系统的簇大小开销,如果需要获取文件占用的磁盘空间,需要结合系统API实现。
  • FileInfo实例创建后,如果文件被修改,需要重新创建实例才能获取最新的文件大小,因为FileInfo的属性是创建时缓存的。

C#FileInfo文件大小GetFiles修改时间:2026-07-12 09:09:27

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。