C# 存储单位转化

来源:互联网 发布:应用架构 数据架构 编辑:程序博客网 时间:2024/05/16 21:22


<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