| Crates.io | file_rw |
| lib.rs | file_rw |
| version | 0.6.6 |
| created_at | 2023-12-22 02:02:23.666725+00 |
| updated_at | 2024-10-02 02:46:58.233377+00 |
| description | A library for high-performance, memory-mapped file I/O utilities. |
| homepage | |
| repository | https://github.com/amkillam/file_rw |
| max_upload_size | |
| id | 1077971 |
| size | 124,209 |
file_rw is a Rust crate for high-performance, memory-mapped file I/O utilities.
You can include the crate in your Rust project by either:
Cargo.toml file:[dependencies]
file_rw = "0.6.6"
cargo add file_rw
file: File operationsread: File reading capabilitieswrite: File writing capabilitiesThe crate re-exports the FileReader and FileWriter structs for external use. These structs contain the aforementioned utilities.
The following are examples of using methods from the FileReader and FileWriter structs.
The examples are separated based on the crate features required to run them.
use file_rw::{FileReader, FileWriter};
use tempfile::tempdir;
let tempdir = tempdir().unwrap();
let tempdir_path = tempdir.path();
let test_path = tempdir_path.join("test.txt");
let mut writer = FileWriter::open(&test_path).unwrap();
writer.append("Hello World!");
assert_eq!(writer.bytes(), b"Hello World!");
writer.overwrite("Hello");
assert_eq!(writer.bytes(), b"Hello");
writer.write("Hullo");
assert_eq!(writer.bytes(), b"Hullo");
Use the search feature to enable search and replace capabilities.
use file_rw::{FileReader, FileWriter};
use tempfile::tempdir;
let tempdir = tempdir().unwrap();
let tempdir_path = tempdir.path();
let test_path = tempdir_path.join("test.txt");
let mut writer = FileWriter::open(&test_path).unwrap();
writer.overwrite("Hullo");
#[cfg(feature = "search")]
{
writer.find_replace_nth("l", "y", 0).unwrap();
assert_eq!(writer.bytes(), b"Huylo");
writer.find_replace("u", "e").unwrap();
assert_eq!(writer.bytes(), b"Heylo");
writer.find_replace("lo", "yyy").unwrap();
assert_eq!(writer.bytes(), b"Heyyyy");
writer.find_replace_all("y", "i").unwrap();
assert_eq!(writer.bytes(), b"Heiiii");
writer.find_replace("e", "i").unwrap();
assert_eq!(writer.bytes(), b"Hiiiii");
let reader = writer.as_reader().unwrap();
let content = reader.read_to_string();
assert_eq!(content, "Hiiiii");
}
Use the hash feature to enable hash capabilities - these methods require providing a
Digest to hash with.
use file_rw::{FileReader, FileWriter};
use tempfile::tempdir;
let tempdir = tempdir().unwrap();
let tempdir_path = tempdir.path();
let test_path = tempdir_path.join("test.txt");
let mut writer = FileWriter::open(&test_path).unwrap();
writer.overwrite("Hello World!");
let reader = writer.as_reader().unwrap();
#[cfg(feature = "hash")]
{
assert_eq!(reader.hash_to_string_with::<sha3::Sha3_256>(), "d0e47486bbf4c16acac26f8b653592973c1362909f90262877089f9c8a4536af");
use sha3::Digest;
let mut sha3_direct_hasher = sha3::Sha3_256::new();
sha3_direct_hasher.update(b"Hello World!");
assert_eq!(reader.hash_with::<sha3::Sha3_256>(), sha3_direct_hasher.finalize());
}
Use the sha3_256 feature to enable SHA3_256 hash capabilities - this also enables the
hash feature, but provides convenience methods that don't require manually providing a Digest.
use file_rw::{FileReader, FileWriter};
use tempfile::tempdir;
let tempdir = tempdir().unwrap();
let tempdir_path = tempdir.path();
let test_path = tempdir_path.join("test.txt");
let mut writer = FileWriter::open(&test_path).unwrap();
writer.overwrite("Hello World!");
let reader = writer.as_reader().unwrap();
#[cfg(feature = "sha3_256")]
{
assert_eq!(reader.hash_to_string(), "d0e47486bbf4c16acac26f8b653592973c1362909f90262877089f9c8a4536af");
use sha3::Digest;
let mut sha3_direct_hasher = sha3::Sha3_256::new();
sha3_direct_hasher.update(b"Hello World!");
assert_eq!(reader.hash(), sha3_direct_hasher.finalize());
}