ZetCode

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

我们将包添加到项目中。

简单示例

我们想将千兆字节值转换为千字节值,并将位值转换为兆字节值。

Program.cs
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

文件大小

在下一个示例中,我们获取文件的大小。

Program.cs
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 方法

ByteSizeToString 方法将当前对象的值转换为十进制字节字符串。 使用的符号是相应值大于或等于的最大单位。

Program.cs
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 等效值。

Program.cs
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 Github 页面

在本文中,我们使用了 ByteSize 库。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我已经撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 C# 教程