C# 存储单位转化


<span style="white-space:pre">	</span>//示例:
        long len = new System.IO.FileInfo("D:\\1.rar").Length;  //获取文件字节大小
        string str = "文件总大小: " + new FileLen(len).Str;    //按字符串形式显示文件大小

    /// <summary>
    /// 存储空间单位
    /// </summary>
    public enum units { B, KB, MB, GB, TB, PB, EB, ZB, YB, BB, NB, DB };

    /// <summary>
    /// 此类用于实现存储单位转化,
    /// 文件大小3种表示方式: 1.字节大小 2.字符串 3.数值+单位
    /// </summary>
    public class FileLen
    {
        /// <summary>
        /// 文件字节大小
        /// </summary> 
        public long Len = 0;
        /// <summary>
        /// 文件大小,字符串形式
        /// </summary>
        public string Str = "0 B";
        /// <summary>
        /// 与存储单位对应的大小
        /// </summary>
        public float Num = 0;
        /// <summary>
        /// 存储单位
        /// </summary>
        public units Ext = units.B;

        /// <summary>
        /// 从字节大小构建
        /// </summary>
        public FileLen(long len)
        {
            Len = len;

            int i = 0;
            Num = len;
            while (len >= 1024 && i <= (int)(units.DB))
            {
                Num = len / 1024f;
                len = (int)Num;
                i++;
            }
            Ext = (units)i;

            Str = Num.ToString("F2") + " " + Ext.ToString();
        }

        /// <summary>
        /// 从字符串构建, str形如"32.14 MB"
        /// </summary>
        public FileLen(string str)
        {
            string[] tmp = str.Split(' ');
            if (tmp.Length != 2) return; 

            Str = str;
            Num = float.Parse(tmp[0]);
            Ext = (units)Enum.Parse(typeof(units), tmp[1]);

            Len = (long)Num;
            int i = (int)Ext;
            while (i>0)
            {
                Len *= 1024;
                i--;
            }
        }

        /// <summary>
        /// 从给定值和容量单位创建, num = 123.23f ext = "KB"
        /// </summary>
        public FileLen(float num, string ext)
        {
            Num = num;
            Ext = (units)Enum.Parse(typeof(units), ext);
            Str = num.ToString() + " " + ext.ToString();

            Len = (long)Num;
            int i = (int)Ext;
            while (i > 0)
            {
                if ((long)(Len * 1024) <= 0) //long越界,保留最大值
                    Len = long.MaxValue;   
                else Len *= 1024;
                i--;
            }
        }

    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值