| extern crate chrono; |
| extern crate fatfs; |
| extern crate fscommon; |
| |
| use std::env; |
| use std::fs::File; |
| use std::io; |
| |
| use chrono::{DateTime, Local}; |
| use fatfs::{FileSystem, FsOptions}; |
| use fscommon::BufStream; |
| |
| fn format_file_size(size: u64) -> String { |
| const KB: u64 = 1024; |
| const MB: u64 = 1024 * KB; |
| const GB: u64 = 1024 * MB; |
| if size < KB { |
| format!("{}B", size) |
| } else if size < MB { |
| format!("{}KB", size / KB) |
| } else if size < GB { |
| format!("{}MB", size / MB) |
| } else { |
| format!("{}GB", size / GB) |
| } |
| } |
| |
| 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) { |
| None => root_dir, |
| Some(ref path) if path == "." => root_dir, |
| Some(ref path) => root_dir.open_dir(&path)?, |
| }; |
| for r in dir.iter() { |
| let e = r?; |
| let modified = DateTime::<Local>::from(e.modified()).format("%Y-%m-%d %H:%M:%S").to_string(); |
| println!("{:4} {} {}", format_file_size(e.len()), modified, e.file_name()); |
| } |
| Ok(()) |
| } |