C# ByteSize
最后修改时间:2023 年 7 月 7 日
在本文中,我们将展示如何使用 ByteSize 库在 C# 中处理大小值。
作者将 ByteSize 定义为一个实用程序类,通过消除所表示值的歧义,使代码中的字节大小表示更容易。
在计算机使用中,公制和二进制系统都用于表示大小单位的倍数。 RAM 制造商使用二进制系统(1 KB 是 1024 字节),而磁盘制造商使用公制系统(1 KB 是 1000 字节)。 为了解决这种混乱,开发了一种新的符号标准。 它定义了 kibi、mebi、gibi、tebi、pebi、exbi、zebi 和 yobi 符号。 这些符号表示 2 的幂。
ByteSize 库帮助我们在这两个系统之间进行转换。 ByteSize 假设 1 KB == 1000 B 且 1 KiB == 1024 B,以符合 IEC 和 NIST 标准。
$ dotnet add package ByteSize
我们将包添加到项目中。
简单示例
我们想将千兆字节值转换为千字节值,并将位值转换为兆字节值。
using ByteSizeLib; double n = 1.59; ByteSize b = ByteSize.FromGigaBytes(n); Console.WriteLine($"{b} is {b.ToString("#,# KB")}"); long n2 = 12_226_311; ByteSize b2 = ByteSize.FromBits(n2); Console.WriteLine($"{b2.ToString("b")} is {b2.ToString("0.#### MB")}");
我们想用 KB 表示 1.59 GB,用 MB 表示 12226311 位。
ByteSize b = ByteSize.FromGigaBytes(n);
我们使用 ByteSize.FromGigaBytes
从 GB 值创建一个 ByteSize
结构。
Console.WriteLine($"{b} is {b.ToString("#,# KB")}");
我们使用 ToString
方法以 KB 输出该值。
ByteSize b2 = ByteSize.FromBits(n2); Console.WriteLine($"{b2.ToString("b")} is {b2.ToString("0.#### MB")}");
同样,我们使用 ByteSize.FromBits
来处理位,再次使用 ToString
来以 MB 表示该值。
$ dotnet run 1.59 GB is 1,590,000 KB 12226311 b is 1.5283 MB
文件大小
在下一个示例中,我们获取文件的大小。
using ByteSizeLib; var fi = new FileInfo("Program.cs"); var n = fi.Length; ByteSize bs = ByteSize.FromBytes(n); Console.WriteLine(bs); Console.WriteLine(bs.ToString("KB")); Console.WriteLine(bs.ToString("KiB")); Console.WriteLine(bs.ToString("B")); Console.WriteLine(bs.ToString("b"));
该程序以多种符号打印文件的大小。
var fi = new FileInfo("Program.cs"); var n = fi.Length;
使用 FileInfo
,我们以字节为单位获取给定文件的大小。
ByteSize bs = ByteSize.FromBytes(n);
我们使用 ByteSize.FromBytes
从该值创建一个 ByteSize
结构。
Console.WriteLine(bs); Console.WriteLine(bs.ToString("KB")); Console.WriteLine(bs.ToString("KiB")); Console.WriteLine(bs.ToString("B")); Console.WriteLine(bs.ToString("b"));
我们以多种大小表示形式打印文件大小。
$ dotnet run 1.832 KB 1.83 KB 1.79 KiB 1832 B 14656 b
ToString 方法
ByteSize
的 ToString
方法将当前对象的值转换为十进制字节字符串。 使用的符号是相应值大于或等于的最大单位。
using ByteSizeLib; double n = 1_099_511_627_776; string[] syms = { "b", "B", "KB", "Kib", "MB", "MiB", "GB", "GiB", "0.######### GB" }; foreach (var sym in syms) { var val = ByteSize.FromBytes(n).ToString(sym); Console.WriteLine(val); }
该程序以不同的单位倍数显示一个 double 值。
$ dotnet run 8796093022208 b 1099511627776 B 1099511627.78 KB 1073741824 Kib 1099511.63 MB 1048576 MiB 1099.51 GB 1024 GiB 1099.511627776 GB
解析字符串值
Parse
方法将二进制或十进制字节的字符串表示形式转换为其 ByteSize
等效值。
using ByteSizeLib; string[] vals = { "8192 B", "3.6 KB", "1.96 kib", "3.54kb" }; foreach (var val in vals) { ByteSize n = ByteSize.Parse(val); Console.WriteLine(n.ToString("KB")); }
在该示例中,我们解析四个字符串值,将它们转换为 ByteSize
并在 KB 中显示它们。
$ dotnet run 8.19 KB 3.6 KB 2.01 KB 3.54 KB
来源
在本文中,我们使用了 ByteSize 库。
作者
列出所有 C# 教程。