#storage #structured #file #file-format #binary #specification

cfb

读取/写入复合文件二进制(结构化存储)文件

16 个版本 (9 个重大更新)

0.10.0 2024年4月15日
0.9.0 2023年10月24日
0.8.1 2023年6月20日
0.7.3 2022年7月5日
0.1.0 2017年3月20日

文件系统 中排名 82

Download history 117653/week @ 2024-05-03 120586/week @ 2024-05-10 122444/week @ 2024-05-17 110064/week @ 2024-05-24 124075/week @ 2024-05-31 108685/week @ 2024-06-07 122694/week @ 2024-06-14 122395/week @ 2024-06-21 126583/week @ 2024-06-28 128286/week @ 2024-07-05 142687/week @ 2024-07-12 150620/week @ 2024-07-19 147658/week @ 2024-07-26 151452/week @ 2024-08-02 157777/week @ 2024-08-09 163123/week @ 2024-08-16

每月下载量 649,444
30 个 Crates 中使用(直接使用 10 个)

MIT 许可证

225KB
5K SLoC

包含 (Cab 文件,17KB) loop_in_chain,(Cab 文件,17KB) tests/panics_fuzzed/alloc_panic,(Cab 文件,17KB) tests/panics_fuzzed/minialloc_panic,(Cab 文件,15KB) loop_in_alloc,(Cab 文件,14KB) loop_in_directory,(Cab 文件,15KB) loop_in_minialloc 以及 3 个其他文件 等。

rust-cfb

Build Status Crates.io Documentation

一个用于读取/写入 复合文件二进制(结构化存储)文件的 Rust 库。有关格式规范,请参阅 MS-CFB

许可证

rust-cfb 在 MIT 许可证 下提供。


lib.rs:

一个用于读取/写入 复合文件二进制(结构化存储)文件的库。有关格式规范,请参阅 MS-CFB

复合文件二进制 (CFB) 文件,也称为 结构化存储文件 或简称为 复合文件,就像一个简单的文件系统在文件中。复合文件包含一个 存储 对象(即目录)的树,每个对象都可以包含 对象(即文件)或其他存储对象。该格式旨在允许对这些流和存储对象进行合理高效的就地修改和调整大小,而无需完全重写磁盘上的 CFB 文件。

示例用法

use cfb;
use std::io::{Read, Seek, SeekFrom, Write};

// Open an existing compound file in read-write mode.
let mut comp = cfb::open_rw("path/to/cfb/file").unwrap();

// Read in all the data from one of the streams in that compound file.
let data = {
    let mut stream = comp.open_stream("/foo/bar").unwrap();
    let mut buffer = Vec::new();
    stream.read_to_end(&mut buffer).unwrap();
    buffer
};

// Append that data to the end of another stream in the same file.
{
    let mut stream = comp.open_stream("/baz").unwrap();
    stream.seek(SeekFrom::End(0)).unwrap();
    stream.write_all(&data).unwrap();
}

// Now create a new compound file, and create a new stream with the data.
let mut comp2 = cfb::create("some/other/path").unwrap();
comp2.create_storage("/spam/").unwrap();
let mut stream = comp2.create_stream("/spam/eggs").unwrap();
stream.write_all(&data).unwrap();

依赖项

~360KB