[−][src]Module olio::fs
Filesystem extensions and utilities.
The fs::PosRead
trait offers a uniform pread
for positioned reads.
The fs::ReadPos
and fs::ReadSlice
types re-implement Read
and
Seek
over any Borrow
of a PosRead
type. For File
in particular,
this enables multiple independent reader instances, without needing a path
to open an independent new File
instance. Thus these types are
compatible with "unnamed" (not linked) temporary files, and can reduce the
number of necessary file handles. Note that unix dup
/dup2
and the
standard File::try_clone
do not provide independent file positions.
Example
use std::fs::File; use std::io::{Read, Write}; use olio::fs::{ReadPos, ReadSlice}; use tempfile::tempfile; let mut file = tempfile()?; file.write_all(b"0123456789")?; // ReadPos by &File so that we can subslice by shared reference let mut rpos = ReadPos::new(&file, 10); // Read the first half let mut buf = [0u8; 5]; rpos.read_exact(&mut buf)?; assert_eq!(&buf, b"01234"); // Create an independent ReadSlice and read to end let mut rslice = rpos.subslice(2, 7); let mut buf = Vec::new(); rslice.read_to_end(&mut buf)?; assert_eq!(&buf, b"23456"); // Read the second half from the original ReadPos assert_eq!(rpos.tell(), 5); let mut buf = [0u8; 5]; rpos.read_exact(&mut buf)?; assert_eq!(&buf, b"56789");
Modules
rc | Compatibility type aliases. |
Structs
ReadPos | Re-implements |
ReadSlice | Re-implements |
Traits
PosRead | Trait offering a uniform |