在使用 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 文件系统上实现完整的文件读写功能。