rust-fatfs fork with rs-core_io as dependency instead. No support for chrono.
Go to file
Rafał Harabień e4b72836f0 Fix file-system corruption when creating directory entries
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
2021-01-22 00:22:54 +01:00
examples Add mkfatfs example 2018-12-29 20:42:49 +01:00
resources Add LFN support and rename some functions. 2017-09-24 22:12:38 +02:00
scripts Make create-test-img.sh more portable. 2017-10-21 17:38:20 +02:00
src Fix file-system corruption when creating directory entries 2021-01-22 00:22:54 +01:00
tests Fix file-system corruption when creating directory entries 2021-01-22 00:22:54 +01:00
.editorconfig Add .editorconfig file and fix whitespaces in existing files. (#4) 2017-10-25 17:20:27 +02:00
.gitignore Add Cargo.lock to .gitignore 2018-05-10 16:34:21 +02:00
.travis.yml Try to fix Travis build 2020-07-20 23:54:21 +02:00
build-nostd.sh Fix std build 2018-05-10 15:14:09 +02:00
Cargo.toml Change version to 0.3.4 2020-07-21 00:00:08 +02:00
CHANGELOG.md Fix file-system corruption when creating directory entries 2021-01-22 00:22:54 +01:00
LICENSE.txt Rename repository to rust-fatfs. 2017-11-08 23:00:30 +01:00
README.md Update no_std usage in README file 2019-07-17 20:00:37 +02:00
rustfmt.toml Change rustfmt options and reformat code 2018-12-29 20:21:24 +01:00
TODO.md Add docs for formatting API 2018-12-08 16:59:10 +01:00

Rust FAT FS

Travis Build Status MIT licensed crates.io Documentation Minimum rustc version

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 - use alloc crate for dynamic allocation. Required for LFN (long file name) support and API which uses String type. You may have to provide a memory allocator implementation.

Note: above feature is enabled by default.

License

The MIT license. See LICENSE.txt.