6个版本
0.1.32 | 2021年1月31日 |
---|---|
0.1.31 | 2020年10月21日 |
#129 在 数据库实现 中
37KB
845 行
TFIO - 事务性文件I/O
TFIO 是一个提供类似数据库中使用的文件I/O操作的Transaction接口的库。它允许在运行时执行和回滚单个操作以及事务。该库还提供了一个构建器模式接口,用于链式调用操作并一次性执行。
特性
- 100% 安全代码(得益于 Rust)
- 10个可回滚的文件/目录操作
- 仅有一个第三方依赖
- 暴露所有
Errors
以供处理 - 100% 测试通过
用法
在您的Rust项目中导入该库
use tfio::*;
创建一个事务并执行它。如果遇到任何 Error
,则回滚整个事务: 注意:路径应仅使用正斜杠(/),并且可以以磁盘开始或相对于当前工作目录开始,即以 ./
开始
use std::io;
use tfio::*;
fn main() -> io::Result<()> {
let temp_dir = "./PATH_TO_TEMP_DIR";
let mut tr = Transaction::new()
.create_file("./foo.txt")
.create_dir("./bar")
.write_file("./foo.txt", temp_dir, b"Hello World".to_vec())
.move_file("./foo.txt", "./bar/foo.txt")
.append_file("./bar/foo.txt", temp_dir, b"dlroW olleH".to_vec());
// Execute the transaction
if let Err(e) = tr.execute() {
eprintln!("Error during execution: {}", e);
// All operations can be reverted in reverse-order if `Error` is encountered
if let Err(ee) = tr.rollback() {
panic!("Error during transaction rollback: {}", ee);
}
}
Ok(())
}
您也可以导入单个操作来使用
use std::io;
use tfio::{CopyFile, RollbackableOperation};
fn main() -> io::Result<()> {
let mut copy_operation = CopyFile::new("./foo.txt", "./bar/baz/foo.txt");
// Execute the operation
if let Err(e) = copy_operation.execute() {
eprintln!("Error during execution: {}", e);
// Rollback the operation
if let Err(ee) = copy_operation.rollback() {
panic!("Error during rollback: {}", ee);
}
}
Ok(())
}
运行测试
$ git clone https://github.com/GandalfTheGrayOfHell/tfio
$ cd tfio
$ cargo test
注意:一些TFIO操作会在提供的TEMP_PATH中创建临时文件和目录。如果操作需要临时目录的路径,则还需要导入 SingleFileOperation
特性或 DirectoryOperation
特性。因此,根据需要导入它们。
路线图
该项目不太可能收到任何更新。它原本是未来项目的构建块,只足够完成工作。这个库有几个地方需要帮助
- 处理
Write
缓冲区 - 路径规范化
PR总是受欢迎 :)
依赖项
~285–445KB