Crates.io | filesize |
lib.rs | filesize |
version | 0.2.0 |
source | src |
created_at | 2019-05-03 19:33:35.6008 |
updated_at | 2020-03-19 04:47:31.351579 |
description | Find the physical space used by a file |
homepage | |
repository | https://github.com/Freaky/rust-filesize |
max_upload_size | |
id | 131807 |
size | 15,320 |
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
abstracts platform-specific methods of determining the real space used
by files, taking into account filesystem compression and sparse files.
It provides two standalone functions, file_real_size
, and file_real_size_fast
,
and as of version 0.2, a std::path::Path
extension trait offering identical
functions named size_on_disk
and size_on_disk_fast
.
The _fast
variants accept a std::fs::Metadata
reference which will be used
to cheaply calculate the size on disk if the platform supports that. This is
intended for cases such as directory traversal, where metadata is available
anyway, and where metadata is needed for other purposes.
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)?;
On Unix platforms this is a thin wrapper around std::fs::symlink_metadata()
and std::os::unix::fs::MetadataExt
, simply returning blocks() * 512
. The
_fast
functions disregard the file path entirely and use the passed metadata
directly.
On Windows, it wraps GetCompressedFileSizeW()
, and the _fast
functions
disregard the passed metadata entirely.
On any other platforms, it wraps std::fs::symlink_metadata()
and only returns
len()
, while the _fast
variants also disregard the path and use the passed
metadata directly.