#size #filesize #humanize #formatting #format-file

no-std humansize

一个可配置的 crate,用于轻松以人类可读的格式表示大小

每月 10 个稳定版本

2.1.3 2022 年 12 月 31 日
2.1.2 2022 年 11 月 16 日
2.1.0 2022 年 10 月 5 日
1.1.1 2021 年 5 月 20 日
0.1.1 2016 年 11 月 19 日

#1 in 值格式化

Download history 127143/week @ 2024-04-22 132940/week @ 2024-04-29 125084/week @ 2024-05-06 132113/week @ 2024-05-13 152223/week @ 2024-05-20 142843/week @ 2024-05-27 150464/week @ 2024-06-03 166477/week @ 2024-06-10 153108/week @ 2024-06-17 156065/week @ 2024-06-24 136522/week @ 2024-07-01 150655/week @ 2024-07-08 138824/week @ 2024-07-15 148164/week @ 2024-07-22 146229/week @ 2024-07-29 145539/week @ 2024-08-05

587,607 每月下载量
用于 313 个 crate (135 直接)

MIT/Apache

25KB
361

Humansize travis 徽章 积极维护

文档

特性

Humansize 是一个信息大小的人类化库,它

  • 简单且方便使用
  • 可定制
  • 支持字节或比特大小
  • no-std
  • 可选非分配
  • 可选接受有符号值

如何使用它...

将 humansize 添加到项目 cargo.toml 中的依赖项

[dependencies]
...
humansize = "2.1.3"

... 以轻松格式化大小

  1. 导入 format_size 函数以及您首选的默认设置
    • DECIMAL (SI)
    • BINARY (IEC)
    • WINDOWS (IEC 值但 SI 单位)
  2. 使用无符号整数调用 format_size
use humansize::{format_size, DECIMAL};

let size = 1_000_000u64;
let res: String = format_size(size, DECIMAL);

assert_eq!(&res, "1 MB");

... 以格式化多个大小

为了提高可重用性,您可以使用 create_format,它返回一个类似 format_size 的格式化函数,但具有柯里化的选项参数,因此不需要再次指定

use humansize::{make_format, DECIMAL};

let formatter = make_format(DECIMAL);

assert_eq!(formatter(1_000_000u64), "1 MB");
assert_eq!(formatter(1_000_000_000u64), "1 GB");
//...

... 以避免分配

在项目的 cargo.toml 中指定 no_alloc 功能标志

[dependencies]
...
humansize = { version = "2.0.0", features = ["no_alloc"] }

这将从编译中排除所有分配代码。现在您可以使用库的内部 SizeFormatter 结构体,它实现了 core::fmt::display,因此您可以将其 write! 到您选择的自定义缓冲区中

use humansize::{SizeFormatter, DECIMAL};

let formatter = SizeFormatter::new(1_000_000usize, DECIMAL);
assert_eq!(format!("{}", formatter), "1 MB");

... 使用 impl 风格的 API

出于样式原因,您可能更喜欢使用早期版本crate的impl-style API。要这样做,请在项目的cargo.toml中指定impl-style功能标志。

[dependencies]
...
humansize = { version = "2.0.0", features = ["impl_style"] }

启用此功能将使两种方法可用

  • format_size在无符号整数类型上
  • format_size_i在有符号整数类型上。

要使用它,将FormatSize trait引入作用域,并在整数类型上调用其方法

use humansize::{FormatSize, FormatSizeI DECIMAL};

assert_eq!(1_000_000u64.format_size(DECIMAL), "1 MB");
assert_eq!((-1_000_000).format_size_i(DECIMAL), "-1 MB");

... 以进一步自定义输出

Humansize导出三个默认选项集

  • Decimal:千位为1000,单位格式为XB
  • Binary:千位为1024,单位格式为XiB
  • WINDOWS(Windows):千位为1024,单位格式为XB

可以通过提供自己的选项集进一步自定义格式化。查看FormatSizeOptions结构的文档,以查看所有可访问的参数,以及此示例以了解其用法。

... 以接受负值

上述解决方案仅接受无符号整数类型作为输入(usize8u16u32u64)。但是,如果接受负值对您的应用程序正确,则存在每个它们的替代方案,将接受有符号整数类型,并在为负时相应地格式化。

  • format_sizeformat_size_i
  • create_formatcreate_format_i
  • FormatSize特质:FormatSizeI特质
  • SizeFormatterISizeFormatter
use humansize::{format_size_i, make_format_i, ISizeFormatter, DECIMAL};

assert_eq!(&format_size_i(-1_000_000, DECIMAL), "-1 MB");

let signed_formatter = make_format_i(DECIMAL);
assert_eq!(&signed_formatter(-1_000_000), "-1 MB");

// With the `impl-style` feature enabled:
// use humansize::FormatSizeI;
// assert_eq(-1_000_000.format_size(DECIMAL), "-1 MB");

let signed_size_formatter = ISizeFormatter::new(-1_000_000, DECIMAL);
assert_eq!(format!("{}", signed_size_formatter), "-1 MB");

许可证

该项目受以下任一许可证的许可

贡献

除非您明确声明,否则您提交给humansize以供包含的所有贡献,根据Apache-2.0许可证定义,将按上述方式双许可,不附加任何其他条款或条件。

依赖关系

~410KB