在使用 FATFS 文件系统时,文件的读写操作主要通过f_open()、f_read()、f_write()和f_close()等核心函数实现。以下是详细的操作步骤和示例代码:
使用f_open()函数打开或创建文件:
#include "ff.h"FIL file; // 文件对象FRESULT res; // 函数返回值// 打开或创建文件(模式由第三个参数决定)res = f_open(&file, "test.txt", FA_READ | FA_WRITE);if (res == FR_OK) {
// 文件打开成功} else {
// 处理错误(如文件不存在、权限不足等)}| 模式标志 | 描述 |
|---|---|
FA_READ | 只读模式 |
FA_WRITE | 写模式(可创建文件) |
FA_OPEN_EXISTING | 仅打开已存在的文件 |
FA_CREATE_NEW | 创建新文件(若已存在则失败) |
FA_CREATE_ALWAYS | 创建新文件(若已存在则覆盖) |
FA_OPEN_ALWAYS | 打开文件(若不存在则创建) |
FA_OPEN_APPEND | 打开文件并追加内容 |
使用f_close()关闭文件并释放资源:
res = f_close(&file);if (res == FR_OK) {
// 文件关闭成功} else {
// 处理关闭失败(如缓存未写入完成)}使用f_puts()写入字符串:
res = f_puts("Hello, FATFS!
", &file);if (res >= 0) {
// 写入成功,返回写入的字符数} else {
// 写入失败}使用f_write()写入二进制数据:
BYTE buffer[] = {0x01, 0x02, 0x03, 0x04};UINT bytes_written; // 实际写入的字节数res = f_write(&file, buffer, sizeof(buffer), &bytes_written);if (res == FR_OK && bytes_written == sizeof(buffer)) {
// 数据完整写入} else {
// 处理写入错误或部分写入}使用f_gets()读取字符串:
char buffer[100];res = f_gets(buffer, sizeof(buffer), &file);if (res != NULL) {
// 成功读取字符串
// buffer内容为读取的字符串} else {
// 读取失败或已到文件末尾}使用f_read()读取二进制数据:
BYTE buffer[100];UINT bytes_read; // 实际读取的字节数res = f_read(&file, buffer, sizeof(buffer), &bytes_read);if (res == FR_OK) {
// 读取成功
// bytes_read为实际读取的字节数} else {
// 处理读取错误}使用f_lseek()移动文件读写指针:
// 移动到文件末尾res = f_lseek(&file, f_size(&file));// 移动到文件开头(偏移量为0)res = f_lseek(&file, 0);// 从当前位置向后偏移100字节res = f_lseek(&file, f_tell(&file) + 100);
使用f_size()获取文件大小(字节):
DWORD file_size = f_size(&file);
#include "ff.h"void write_to_file(void) {
FIL file;
FRESULT res;
UINT bytes_written;
const char *text = "Hello, FATFS!
";
// 打开文件(若不存在则创建,若存在则覆盖)
res = f_open(&file, "test.txt", FA_CREATE_ALWAYS | FA_WRITE);
if (res != FR_OK) return; // 处理错误
// 写入字符串
res = f_puts(text, &file);
if (res < 0) {
f_close(&file);
return;
}
// 写入二进制数据
BYTE data[] = {0x01, 0x02, 0x03, 0x04};
res = f_write(&file, data, sizeof(data), &bytes_written);
if (res != FR_OK || bytes_written != sizeof(data)) {
f_close(&file);
return;
}
// 关闭文件
f_close(&file);}#include "ff.h"#include <stdio.h>void read_from_file(void) {
FIL file;
FRESULT res;
char buffer[100];
UINT bytes_read;
// 打开文件(只读模式)
res = f_open(&file, "test.txt", FA_READ);
if (res != FR_OK) return; // 处理错误
// 读取字符串
res = f_gets(buffer, sizeof(buffer), &file);
if (res != NULL) {
printf("Read string: %s", buffer);
}
// 读取二进制数据
res = f_read(&file, buffer, sizeof(buffer), &bytes_read);
if (res == FR_OK && bytes_read > 0) {
printf("Read %u bytes of binary data
", bytes_read);
}
// 关闭文件
f_close(&file);}通过以上函数和方法,即可在 FATFS 文件系统上实现完整的文件读写功能。
电话:176-6539-0767
Q Q:135-0379-986
邮箱:1350379986@qq.com
地址:深圳市南山区后海大道1021号C座