#文件-I/O #I/O操作 #事务性 #目录 #回滚 #错误 #接口

tfio

一个提供类似数据库中使用的文件I/O操作的Transaction接口的库

6个版本

0.1.32 2021年1月31日
0.1.31 2020年10月21日

#129数据库实现

MIT 许可证

37KB
845

TFIO - 事务性文件I/O

tfio

TFIO 是一个提供类似数据库中使用的文件I/O操作的Transaction接口的库。它允许在运行时执行和回滚单个操作以及事务。该库还提供了一个构建器模式接口,用于链式调用操作并一次性执行。

特性

  1. 100% 安全代码(得益于 Rust
  2. 10个可回滚的文件/目录操作
  3. 仅有一个第三方依赖
  4. 暴露所有 Errors 以供处理
  5. 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 特性。因此,根据需要导入它们。

路线图

该项目不太可能收到任何更新。它原本是未来项目的构建块,只足够完成工作。这个库有几个地方需要帮助

  1. 处理 Write 缓冲区
  2. 路径规范化

PR总是受欢迎 :)

依赖项

~285–445KB