3 ms·
here's what it does if i feed your nit pick into it verbatim: use std::fs::File; use std::io::{self, Read}; use std::str::from_utf8; fn read_f
by raggi 3y ago
here's what it does if i feed your nit pick into it verbatim:
use std::fs::File;
use std::io::{self, Read};
use std::str::from_utf8;
fn read_file_character_by_character(path: &str) -> io::Result<()> {
// Open the file in read-only mode.
let mut file = File::open(path)?;
let mut buffer = [0; 4]; // UTF-8 character max byte length
let mut temp_buffer = vec![];
while let Ok(bytes_read) = file.read(&mut buffer[..1]) { // Read byte by byte
if bytes_read == 0 { // End of file
break;
}
temp_buffer.push(buffer[0]);
if let Ok(s) = from_utf8(&temp_buffer) {
if s.chars().count() == 1 { // Complete character read
print!("{}", s);
temp_buffer.clear(); // Clear temp buffer for next character
}
}
}
Ok(())
}
fn main() {
let path = "path/to/your/file.txt";
if let Err(e) = read_file_character_by_character(path) {
eprintln!("Error reading file: {}", e);
}
}
- comex 3y agoUnlike the original version, this version compiles and seems to basically work correctly. However, the design is misleading: `buffer` is declared as an array of 4 bytes but only the first byte is ever used. The code also has suboptimal performance and error handling, though that's not the end of the world.
- raggi 3y agoall true, as I said in another fork of the thread, this comes down to part of what humans will still be valuable for in this loop: distilling poor requirements into better requirements.