use clap::Parser; use std::fs; use std::fs::File; use std::io::BufReader; use std::io::prelude::*; use std::process; #[derive(Parser, Debug)] #[clap(author, version, about, long_about = None)] struct Args { /// file A file_a: String, /// file B file_b: String, } fn main() { let args = Args::parse(); let size_a = fs::metadata(&args.file_a).unwrap().len(); let size_b = fs::metadata(&args.file_b).unwrap().len(); if size_a != size_b { println!("Files have different sizes."); process::exit(1); } let handle_a = File::open(&args.file_a).unwrap(); let handle_b = File::open(&args.file_b).unwrap(); let mut reader_a = BufReader::new(handle_a); let mut reader_b = BufReader::new(handle_b); let mut buf_a = [0; 1024]; let mut buf_b = [0; 1024]; loop { let len_a = reader_a.read(&mut buf_a).unwrap(); let len_b = reader_b.read(&mut buf_b).unwrap(); if len_a == 0 && len_b == 0 { break; } if len_a != len_b { println!("Files are NOT equal."); process::exit(2); } if buf_a != buf_b { println!("Files are NOT equal."); process::exit(3); } } println!("Files are equal."); process::exit(0); }