28 个版本 (5 个破坏性版本)

0.6.2 2024 年 7 月 17 日
0.6.1 2024 年 7 月 17 日
0.5.2 2024 年 7 月 17 日
0.4.5 2024 年 7 月 10 日
0.1.5 2023 年 12 月 23 日

#337Rust 模式

Download history 3/week @ 2024-06-07 230/week @ 2024-06-21 128/week @ 2024-06-28 556/week @ 2024-07-05 598/week @ 2024-07-12 84/week @ 2024-07-19 24/week @ 2024-07-26 4/week @ 2024-08-02

每月 906 次下载

GPL-3.0-or-later

48KB
685 代码行

file_rw

file_rw 是一个 Rust crate,用于高性能、内存映射文件 I/O 工具。

Crates.io GNU GPLv3 licensed Build Status docs.rs

特性

  • 高性能的文件读写能力
  • 内存映射文件,用于高效访问和操作
  • 文件内容常见操作的 高级、高效抽象

安装

您可以通过以下方式将 crate 包含到您的 Rust 项目中:

  • 将以下内容添加到您的 Cargo.toml 文件中
[dependencies]
file_rw = "0.6.2"
  • 运行以下 Cargo 命令来自动完成此操作
cargo add file_rw

模块

  • file:文件操作
  • read:文件读取能力
  • write:文件写入能力

重导出

该 crate 重导出 FileReaderFileWriter 结构体以供外部使用。这些结构体包含上述工具。

示例

以下是从 FileReaderFileWriter 结构体中使用方法的示例。示例根据运行它们所需的 crate 功能进行分类。

简单的读写

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");

搜索和替换

使用 search 功能启用搜索和替换功能。

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");
}

哈希

使用 hash 功能启用哈希功能 - 这些方法需要提供一个 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 = "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());

}

SHA3_256 哈希

使用 sha3_256 功能启用 SHA3_256 哈希功能 - 这也启用了 hash 功能,但提供了方便的方法,无需手动提供 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());
}

依赖

~130–720KB