Module olio::fs
[−]
[src]
Filesystem extensions and utilities.
The PosRead
trait offers a uniform pread
for positioned reads.
The ReadPos
and 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
extern crate olio; extern crate tempfile; 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 |