#async #fat #root-directory #no-std #exfat

no-std embedded-exfat

支持异步的ExFAT文件系统库,主要针对嵌入式系统

6个版本

0.2.4 2023年2月12日
0.2.3 2023年2月11日
0.1.1 2023年1月25日

#1347 in 文件系统

每月 30 次下载

MIT 协议

98KB
2.5K SLoC

embedded-exfat

一个专注于no_std嵌入式系统并支持异步的exFAT库

alloc是该crate的强制依赖,尽管内存分配已最小化,上表为256B,每个文件或目录为12B加上名称大小,根目录为12B。

对于异步场景,如果可用std库,则启用async-std功能,否则启用async功能

对于no_std场景,请注意,线程安全由spin crate提供,这可能导致死锁。

使用此crate

use std::io::Write;
use exfat::error::Error;
use exfat::io::std::FileIO;
use exfat::ExFAT;
use exfat::FileOrDirectory;

let io = FileIO::open(device).map_err(|e| Error::IO(e)).unwrap();
let mut exfat = ExFAT::new(io).unwrap();
exfat.validate_checksum().unwrap();
let mut root = exfat.root_directory().unwrap();
root.validate_upcase_table_checksum().unwrap();
let mut file = match root.open().unwrap().open("test.txt").unwrap() {
    FileOrDirectory::File(f) => f,
    FileOrDirectory::Directory(_) => panic!("Not a file"),
};
let mut stdout = std::io::stdout();
let mut buf = [0u8; 512];
loop {
    let size = file.read(&mut buf).unwrap();
    stdout.write_all(&buf[..size]).unwrap();
    if size < buf.len() {
        break;
    }
}

依赖项

~2–12MB
~142K SLoC