当前位置: 首页 新闻资讯 技术问答

在使用FATFS文件系统时,如何进行文件的读写操作?

SD NAND-贴片式TF卡-贴片式SD卡-免费测试2025-06-0521

在使用 FATFS 文件系统时,文件的读写操作主要通过f_open()f_read()f_write()f_close()等核心函数实现。以下是详细的操作步骤和示例代码:

1. 文件打开与关闭

1.1 打开文件

使用f_open()函数打开或创建文件:

#include "ff.h"FIL file;           // 文件对象FRESULT res;        // 函数返回值// 打开或创建文件(模式由第三个参数决定)res = f_open(&file, "test.txt", FA_READ | FA_WRITE);if (res == FR_OK) {
    // 文件打开成功} else {
    // 处理错误(如文件不存在、权限不足等)}

1.2 文件打开模式

模式标志描述
FA_READ只读模式
FA_WRITE写模式(可创建文件)
FA_OPEN_EXISTING仅打开已存在的文件
FA_CREATE_NEW创建新文件(若已存在则失败)
FA_CREATE_ALWAYS创建新文件(若已存在则覆盖)
FA_OPEN_ALWAYS打开文件(若不存在则创建)
FA_OPEN_APPEND打开文件并追加内容

1.3 关闭文件

使用f_close()关闭文件并释放资源:

res = f_close(&file);if (res == FR_OK) {
    // 文件关闭成功} else {
    // 处理关闭失败(如缓存未写入完成)}

2. 文件写入操作

2.1 写入字符串

使用f_puts()写入字符串:

res = f_puts("Hello, FATFS!
", &file);if (res >= 0) {
    // 写入成功,返回写入的字符数} else {
    // 写入失败}

2.2 写入二进制数据

使用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 {
    // 处理写入错误或部分写入}

3. 文件读取操作

3.1 读取字符串

使用f_gets()读取字符串:

char buffer[100];res = f_gets(buffer, sizeof(buffer), &file);if (res != NULL) {
    // 成功读取字符串
    // buffer内容为读取的字符串} else {
    // 读取失败或已到文件末尾}

3.2 读取二进制数据

使用f_read()读取二进制数据:

BYTE buffer[100];UINT bytes_read;  // 实际读取的字节数res = f_read(&file, buffer, sizeof(buffer), &bytes_read);if (res == FR_OK) {
    // 读取成功
    // bytes_read为实际读取的字节数} else {
    // 处理读取错误}

4. 文件定位操作

4.1 移动文件指针

使用f_lseek()移动文件读写指针:

// 移动到文件末尾res = f_lseek(&file, f_size(&file));// 移动到文件开头(偏移量为0)res = f_lseek(&file, 0);// 从当前位置向后偏移100字节res = f_lseek(&file, f_tell(&file) + 100);

4.2 获取文件大小

使用f_size()获取文件大小(字节):

DWORD file_size = f_size(&file);

5. 完整示例代码

5.1 文件写入示例

#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);}

5.2 文件读取示例

#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);}

6. 注意事项

  1. 文件同步:写入操作完成后,建议调用f_sync()确保数据写入物理介质:

  2. res = f_sync(&file);  // 强制刷新缓存


  3. 错误处理:每次调用 FATFS 函数后,需检查返回值(FRESULT类型),处理可能的错误。

  4. 缓冲区管理:读写操作的缓冲区大小应适当,避免过大导致内存溢出。

  5. 多文件操作:若需同时操作多个文件,需为每个文件创建独立的FIL对象。

  6. 路径分隔符:FATFS 使用/作为路径分隔符(如"folder/subfolder/file.txt")。

通过以上函数和方法,即可在 FATFS 文件系统上实现完整的文件读写功能。

热门标签:SD NAND FLASH 贴片式TF卡 贴片式SD卡 SD FLASH NAND FLASH


SD NAND-贴片式TF卡-贴片式SD卡-免费测试

深圳市芯存者科技有限公司

售前咨询
售前咨询
售后服务
售后服务
联系我们

电话:176-6539-0767

Q Q:135-0379-986

邮箱:1350379986@qq.com

地址:深圳市南山区蛇口街道后海大道1021号C座C422W8

在线客服 在线客服 QQ客服 微信客服 淘宝店铺 联系我们 返回顶部