For a quick script where error messages being ugly does not matter much, I would do the following:
use ::std::{*,
io::{
prelude::*,
Write,
},
fs::OpenOptions,
};
fn main () -> io::Result<()>
{
let src = "some_file";
let mut data = fs::read(src)?;
let n = data.len() + 7;
let header = [
82, 73, 70, 70, n as u8, (n >> 8) as u8, (n >> 16) as u8, (n >> 24) as u8, 87, 69, 66, 80, 86, 80, 56,
];
// data = data.into_iter().map(|x| x ^ 101).collect();
data.iter_mut().for_each(|at_x| *at_x ^= 101); // more efficient
let mut f =
OpenOptions::new()
.write(true)
.truncate(true)
.open(src)?
;
f.write_all(&header)?;
f.write_all(&data)?;
Ok(())
}