2 个不稳定版本

0.2.0 2020年3月19日
0.1.0 2019年5月3日

#131 in 操作系统

Download history 7800/week @ 2023-12-12 9015/week @ 2023-12-19 5247/week @ 2023-12-26 7437/week @ 2024-01-02 7481/week @ 2024-01-09 9832/week @ 2024-01-16 9527/week @ 2024-01-23 8422/week @ 2024-01-30 8347/week @ 2024-02-06 10931/week @ 2024-02-13 11528/week @ 2024-02-20 11381/week @ 2024-02-27 12849/week @ 2024-03-05 9674/week @ 2024-03-12 13340/week @ 2024-03-19 9465/week @ 2024-03-26

46,882 每月下载量
用于 32 个 crate(直接使用 15 个)

MIT 许可证

12KB
85

Cargo Documentation Build Status CI

filesize

Cross-platform physical disk space use retrieval for Rust.

概要

pub trait PathExt {
    fn size_on_disk(&self) -> std::io::Result<u64>;
    fn size_on_disk_fast(&self, metadata: &Metadata) -> std::io::Result<u64>;
}
impl PathExt for std::path::Path;

pub fn file_real_size<P: AsRef<std::path::Path>>(path: P) -> std::io::Result<u64>;
pub fn file_real_size_fast<P: AsRef<std::path::Path>>(
    path: P,
    metadata: &Metadata
) -> std::io::Result<u64>;

描述

filesize 抽象出平台特定的方法来确定文件实际使用的空间,考虑了文件系统压缩和稀疏文件。

它提供了两个独立函数,file_real_sizefile_real_size_fast,以及从版本 0.2 开始,一个名为 size_on_disksize_on_disk_fast 的同名函数的 std::path::Path 扩展特质。

_fast 变体接受一个 std::fs::Metadata 引用,如果平台支持,将用于便宜地计算磁盘大小。这适用于目录遍历等场景,其中无论如何都可用元数据,并且元数据需要用于其他目的。

示例

use std::path::Path;
use filesize::PathExt;

let path = Path::new("Cargo.toml");
let metadata = path.symlink_metadata()?;

let realsize = path.size_on_disk()?;
let realsize = path.size_on_disk_fast(&metadata)?;

// Older interface
use filesize::{file_real_size, file_real_size_fast};

let realsize = file_real_size(path)?;
let realsize = file_real_size_fast(path, &metadata)?;

平台特定行为

在 Unix 平台上,这是一个对 std::fs::symlink_metadata()std::os::unix::fs::MetadataExt 的薄包装,简单地返回 blocks() * 512_fast 函数完全忽略文件路径,并直接使用传递的元数据。

在 Windows 上,它包装了 GetCompressedFileSizeW(),而 _fast 函数完全忽略传递的元数据。

在其他平台上,它调用 std::fs::symlink_metadata() 并只返回 len(),而 _fast 变体也忽略路径,直接使用传入的元数据。

依赖关系

~175KB