cmpr/src/main.rs

60 lines
1.3 KiB
Rust

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);
}