1 个不稳定版本
0.1.0 | 2022年1月6日 |
---|
在 文件系统 中排名 #1513
12KB
131 行代码(不包括注释)
shim-fs
是 std::fs::File
的(近)直接替换品,它将所有磁盘写入重定向到内存缓冲区,且无依赖。更确切地说,为 shim_fs::File
实现了 std::io::{Seek, Write}
特性。
可能的用途
当第三方代码将某些内容写入磁盘,随后立即将其读入内存时,这可能很有用:您仍然需要修改第三方代码,但如果您运气好(下面将详细介绍),可能只需要更改几行。
另一个可能的用途是针对 WebAssembly,其中无法进行正常的磁盘写入。
一个具体的用例场景:假设您正在使用第三方代码生成 crate。生成的代码总是写入文件,但您希望进一步处理它,因此需要它在内存中。如果该 crate 使用 std::fs::File::create()
来创建文件,并且没有使用 Seek
和 Write
特性以外的功能,则可以非常容易地跳过所有中间的文件系统操作,只需在缓冲区中获取写入的字节:将 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())
}
}