forked from M-Labs/rust-fatfs
rust-fatfs fork with rs-core_io as dependency instead. No support for chrono.
e4b72836f0
Corruption happens if: * files are created in non-root directory * directory size becomes greater or equal to cluster size Creating last directory entry in the directory cluster corrupts the cluster directly preceding the directory cluster. For 512 bytes long cluster creating 8th directory entry (counted from 1) will cause first corruption. Directory entry that causes the corruption will not be updated correctly. Fixes #42 |
||
---|---|---|
examples | ||
resources | ||
scripts | ||
src | ||
tests | ||
.editorconfig | ||
.gitignore | ||
.travis.yml | ||
build-nostd.sh | ||
Cargo.toml | ||
CHANGELOG.md | ||
LICENSE.txt | ||
README.md | ||
rustfmt.toml | ||
TODO.md |
Rust FAT FS
A FAT filesystem library implemented in Rust.
Features:
- read/write file using standard Read/Write traits
- read directory contents
- create/remove file or directory
- rename/move file or directory
- read/write file timestamps (updated automatically if
chrono
feature is enabled) - format volume
- FAT12, FAT16, FAT32 compatibility
- LFN (Long File Names) extension is supported
- Basic no_std environment support
Usage
Add this to your Cargo.toml
:
[dependencies]
fatfs = "0.3"
and this to your crate root:
extern crate fatfs;
You can start using the fatfs
library now:
let img_file = File::open("fat.img")?;
let fs = fatfs::FileSystem::new(img_file, fatfs::FsOptions::new())?;
let root_dir = fs.root_dir();
let mut file = root_dir.create_file("hello.txt")?;
file.write_all(b"Hello World!")?;
Note: it is recommended to wrap the underlying file struct in a buffering/caching object like BufStream
from fscommon
crate. For example:
extern crate fscommon;
let buf_stream = BufStream::new(img_file);
let fs = fatfs::FileSystem::new(buf_stream, fatfs::FsOptions::new())?;
See more examples in the examples
subdirectory.
no_std usage
Add this to your Cargo.toml
:
[dependencies]
fatfs = { version = "0.3", features = ["core_io"], default-features = false }
For building in no_std
mode a Rust compiler version compatible with core_io
crate is required.
For now core_io
supports only nightly Rust channel. See a date suffix in latest core_io
crate version for exact
compiler version.
Additional features:
alloc
- usealloc
crate for dynamic allocation. Required for LFN (long file name) support and API which usesString
type. You may have to provide a memory allocator implementation.
Note: above feature is enabled by default.
License
The MIT license. See LICENSE.txt
.