diff --git a/src/main.rs b/src/main.rs index f4cb055..61e0a76 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,6 +10,8 @@ mod node; use byte_writer::{binary_to_string, string_to_binary}; use node::{Node, create_tree, read_tree, tree_to_map, tree_to_string}; +const MAGIC_NUMBER: u8 = 128; + fn main() -> std::io::Result<()> { let args: Vec = env::args().collect(); @@ -36,9 +38,9 @@ fn main() -> std::io::Result<()> { let binary = string_to_binary(&str_bin); let len_tree: u32 = str_bin.len() as u32; let string: String = chars.iter().collect(); - after_compression - .write_all(&(len_tree + (string.len() as u32) * 8).to_be_bytes())?; + after_compression.write_all(&MAGIC_NUMBER.to_be_bytes())?; after_compression.write_all(&len_tree.to_be_bytes())?; + after_compression.write_all(&(string.len() as u32).to_be_bytes())?; after_compression.write_all(&binary)?; after_compression.write_all(string.as_bytes())?; to_compress.seek(SeekFrom::Start(0))?; @@ -59,8 +61,17 @@ fn main() -> std::io::Result<()> { match file_name { Some(f) => { let mut to_print = File::open(f)?; - let untranslate = string_translate(&mut to_print); - eprintln!("untranslate = {}", untranslate); + let mut mag_buf = [0u8]; + let _ = to_print.read_exact(&mut mag_buf); + match u8::from_be_bytes(mag_buf) { + 128 => { + let untranslate = string_translate(&mut to_print); + eprintln!("untranslate = {}", untranslate); + } + _ => { + println!("Error oppening file, check type file !") + } + } } None => { println!("No file name!"); @@ -118,22 +129,16 @@ fn get_map_file(mut file: &File) -> Result, std::io::Error> { fn string_translate(file: &mut File) -> String { let mut buffer = [0u8; 4]; let _ = file.read_exact(&mut buffer); - let len_head = u32::from_be_bytes(buffer); - let _ = file.read_exact(&mut buffer); let len_tree = u32::from_be_bytes(buffer); - //eprintln!("len_head = {:?}", len_head); - //eprintln!("len_tree = {:?}", len_tree); + let _ = file.read_exact(&mut buffer); + let len_chars = u32::from_be_bytes(buffer) * 8; - let len_chars = len_head - len_tree; let tree_bin = read_n_bytes(file, len_tree); let tree_str = binary_to_string(tree_bin, len_tree); - //eprintln!("tree_str = {:?}", tree_str); let chars_bin = read_n_bytes(file, len_chars); let chars_str = String::from_utf8(chars_bin).unwrap(); let root = read_tree(&tree_str, &chars_str.chars().collect()); - //let map = tree_to_map(&mut root, true); - //eprintln!("map = {:?}", map); let _ = file.read_exact(&mut buffer); let len_body = u32::from_be_bytes(buffer); translate_bin_char(file, root, len_body)