#shim #fs-file #io #write-file #redirect #disk #io-write

shim-fs

std::fs::File 的替换库,将所有磁盘写入重定向到内存中

1 个不稳定版本

0.1.0 2022年1月6日

文件系统 中排名 #1513

MIT 许可协议

12KB
131 行代码(不包括注释)

shim-fs

std::fs::File 的(近)直接替换品,它将所有磁盘写入重定向到内存缓冲区,且无依赖。更确切地说,为 shim_fs::File 实现了 std::io::{Seek, Write} 特性。

可能的用途

当第三方代码将某些内容写入磁盘,随后立即将其读入内存时,这可能很有用:您仍然需要修改第三方代码,但如果您运气好(下面将详细介绍),可能只需要更改几行。

另一个可能的用途是针对 WebAssembly,其中无法进行正常的磁盘写入。

一个具体的用例场景:假设您正在使用第三方代码生成 crate。生成的代码总是写入文件,但您希望进一步处理它,因此需要它在内存中。如果该 crate 使用 std::fs::File::create() 来创建文件,并且没有使用 SeekWrite 特性以外的功能,则可以非常容易地跳过所有中间的文件系统操作,只需在缓冲区中获取写入的字节:将 crate 的 std::fs::File::create() 调用替换为 shim_fs::File::create(),并在第三方 crate 完成其工作后在您的代码中调用 shim_fs::get_files()。是的,就这么简单。

示例用法

以下示例在启用 use-shim-fs 特性时创建一个常规文件。如果已启用,则不会创建文件,并将对 File 对象的写入重定向到内存中。可以轻松访问模拟文件的內容。

#[cfg(feature = "use-shim-fs")]
use shim_fs::File;
#[cfg(not(feature = "use-shim-fs"))]
use std::fs::File;

use std::io::Write;
use std::path::Path;

fn main() {
    let path = Path::new("hello.txt");
    let mut file = File::create(path).unwrap();
    write!(file, "Hello, world!").unwrap();

    #[cfg(feature = "use-shim-fs")]
    {
        assert_eq!(shim_fs::get_files()[path], "Hello, world!".as_bytes())
    }
}

无运行时依赖