rust-fatfs/examples/ls.rs

45 lines
1.2 KiB
Rust
Raw Permalink Normal View History

2018-06-29 00:13:07 +08:00
extern crate chrono;
extern crate fatfs;
extern crate fscommon;
2017-09-24 20:34:23 +08:00
use std::env;
use std::fs::File;
use std::io;
2017-09-24 20:34:23 +08:00
2018-06-29 00:13:07 +08:00
use chrono::{DateTime, Local};
use fatfs::{FileSystem, FsOptions};
use fscommon::BufStream;
2017-09-24 20:34:23 +08:00
fn format_file_size(size: u64) -> String {
const KB: u64 = 1024;
2018-06-29 00:13:07 +08:00
const MB: u64 = 1024 * KB;
const GB: u64 = 1024 * MB;
if size < KB {
2017-09-24 20:34:23 +08:00
format!("{}B", size)
} else if size < MB {
format!("{}KB", size / KB)
} else if size < GB {
format!("{}MB", size / MB)
2017-09-24 20:34:23 +08:00
} else {
format!("{}GB", size / GB)
2017-09-24 20:34:23 +08:00
}
}
fn main() -> io::Result<()> {
let file = File::open("resources/fat32.img")?;
let buf_rdr = BufStream::new(file);
let fs = FileSystem::new(buf_rdr, FsOptions::new())?;
let root_dir = fs.root_dir();
let dir = match env::args().nth(1) {
2017-09-24 20:34:23 +08:00
None => root_dir,
Some(ref path) if path == "." => root_dir,
Some(ref path) => root_dir.open_dir(&path)?,
2017-09-24 20:34:23 +08:00
};
for r in dir.iter() {
let e = r?;
2017-10-06 22:42:29 +08:00
let modified = DateTime::<Local>::from(e.modified()).format("%Y-%m-%d %H:%M:%S").to_string();
2017-09-24 20:34:23 +08:00
println!("{:4} {} {}", format_file_size(e.len()), modified, e.file_name());
}
Ok(())
2017-09-24 20:34:23 +08:00
}