Kivanc Gunalp 4e9b5735ad Use more idiomatic Rust in file_io2/file_io3
- file_io2: replace the manual line_number counter with
  .lines().enumerate(), and replace
  buffered_file_writer.write(format!(...).as_bytes()) with writeln!,
  which both formats and guarantees a complete write (write_fmt loops
  internally, unlike a single Write::write call).
- file_io3: replace the manual match on file_path.parent() with
  .ok_or_else(...)? for a more idiomatic Option-to-Result conversion.

Verified locally: both solutions compile under edition 2024, clippy is
silent, and running them still produces identical output (3 lines
processed / 117-byte file, non-readonly permissions) with no leftover
files.
2026-07-26 15:48:35 +00:00
..
2026-07-26 15:09:01 +00:00

File IO

Rust provides several file I/O functions in the standard library. Buffered reads and writes provide better performance by reducing the number of underlying system calls.

Learning goals

  • file_io1 — Read an entire file into memory with fs::read_to_string and handle the Result it returns instead of unwrapping blindly, so you get comfortable with the basic "open, read, handle the error" pattern that most file I/O in Rust builds on.
  • file_io2 — Wrap a File in a BufReader to read it line by line and a BufWriter to write the transformed output, so you understand why buffering matters for I/O performance and how BufRead::lines lets you process input incrementally instead of loading it all at once.
  • file_io3 — Build a path with PathBuf, then call .metadata() to inspect properties like creation time, size, and permissions, so you can work with the filesystem safely across platforms without hardcoding path separators.

Further information

Here is the documentation for these functions in the standard library.