1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2017年10月16日 |
---|
#1409 在 文件系统
在 scoundrel 中使用
590KB
2K SLoC
包含 (WOFF 字体,120KB) Heuristica-Italic.woff,(WOFF 字体,90KB) FiraSans-Medium.woff,(WOFF 字体,92KB) FiraSans-Regular.woff,(WOFF 字体,56KB) SourceCodePro-Regular.woff,(WOFF 字体,56KB) SourceCodePro-Semibold.woff,(WOFF 字体,49KB) SourceSerifPro-Bold.woff 和更多.
简介
filearco_rs
是一个用于创建和读取简单存档格式的 Rust crate。它专为游戏开发设计,但也可以用于其他用途。
它还包括一个命令行工具 filearco
,可以将目录层次结构中的所有文件写入存档。
示例
此示例演示了创建 FileArco 版本 1 存档文件并从该存档中检索文本文件的过程。
extern crate filearco;
use std::path::Path
fn main() {
let path = Path::new("archive.fac");
let archive = filearco::v1::FileArco::new(path).ok().unwrap();
let license = archive.get("LICENSE-MIT").unwrap()
let license_text = license.as_str().ok().unwrap();
println!("{}", license_text);
}
文件格式
版本 1
注意:所有数据都以 LSB(即“小端”)字节顺序存储。
// Ofset 0x00: Start of file
#[repr(C)]
struct Header {
id: [u8; 8], // b"FILEARCO"
version_number: u64 // 1
file_offset: u64, // Offset to first file
page_size: u64, // Memory Page Size of system that created file
entries_length: u64, // Length of Entries table (in bytes)
entries_checksum: u64, // CRC64-ISO checksum of Entries table
}
// Offset 0x30:
header_checksum: u64 // CRC64-ISO checksum of Header
// Offset 0x38:
// Start of serialized HashMap<String, Entry>
number_of_entries: u64
// Offset 0x40: Start of first file's metadata
file_name_length: u64, // Length of file path (in bytes)
file_name: [u8; file_name_length] // File path as raw UTF-8 string
#[repr(C)
struct Entry {
offset: u64,
length: u64,
aligned_length: u64,
checksum: u64
}
// Metadata for the second file (and so on) follow directly after
// NOTE: the last Entry is followed by enough zeros to make the next section
// start at a multiple of header.page_size
// Offset M * header.page_size: Start of file contents section
// Offset header.file_offset + entry.offset: Start of a file's contents
contents: [u8; entry.length] // Contents of file as byte array
// NOTE: Each contents array is followed by enough zeros to make the next file
// contents array start at a multiple of header.page_size
平台
filearco_rs
应该在 Windows 和任何 POSIX 兼容系统(Linux、Mac OSX 等)上运行。
filearco_rs
在以下平台上进行了持续测试:
x86_64-unknown-linux-gnu
(Linux)i686-unknown-linux-gnu
x86_64-unknown-linux-musl
(Linux w/ MUSL)i686-unknown-linux-musl
x86_64-apple-darwin
(Mac OSX)i686-apple-darwin
x86_64-pc-windows-msvc
(Windows)i686-pc-windows-msvc
x86_64-pc-windows-gnu
i686-pc-windows-gnu
filearco_rs
持续进行交叉编译以支持:
arm-unknown-linux-gnueabihf
aarch64-unknown-linux-gnu
mips-unknown-linux-gnu
aarch64-unknown-linux-musl
i686-linux-android
x86_64-linux-android
arm-linux-androideabi
aarch64-linux-android
i386-apple-ios
x86_64-apple-ios
i686-unknown-freebsd
x86_64-unknown-freebsd
x86_64-unknown-netbsd
asmjs-unknown-emscripten
依赖项
~1.3–2.2MB
~43K SLoC