fatfs 学习笔记--f_write用法(最新版本R0.13)

f_write

The f_write writes data to a file.

FRESULT f_write (
  FIL* fp,          /* [IN] Pointer to the file object structure */
  const void* buff, /* [IN] Pointer to the data to be written */
  UINT btw,         /* [IN] Number of bytes to write */
  UINT* bw          /* [OUT] Pointer to the variable to return number of bytes written */
);
Parameters
fp
Pointer to the open file object structure.
buff
Pointer to the data to be written.
btw
Specifies number of bytes to write in range of  UINT type.
bw
Pointer to the  UINT variable to return the number of bytes written. This value is always valid after the function call regardless of the return value.
Description

The function starts to write data to the file at the position pointed by the read/write pointer. The read/write pointer advances as number of bytes written. After the function succeeded, *bw should be checked to detect the disk full. In case of *bw < btw, it means the volume got full during the write operation. The function can take a time when the volume is full or close to full.

QuickInfo

Available when FF_FS_READONLY == 0.


1.  在读操作过程中,一旦*br < btr 则读/写指针到达了文件结束位置.
2. 在写操作过程中,一旦*bw < btw,则意味着该卷已满.

函数实例:
/*
*********************************************************************************************************
*    函 数 名: Test_f_readwrite
*    功能说明: f_read和f_write函数测试
*    形    参:无
*    返 回 值: 无
*********************************************************************************************************
*/
uint8_t Test_f_readwrite(void)
{
    FRESULT fr, result;
    FATFS fs;
    FIL fsrc, fdst;
    UINT br, bw;
    BYTE buffer[4096];   /* File copy buffer */
    float FinishPecent;
    uint32_t Count = 0;


    
    /* 第1步:先挂载文件系统*********************************************************************/
    result = f_mount(&fs, "1:", 1);    /* Mount a logical drive */
    if (result != FR_OK)
    {
        printf("挂载文件系统失败 (%s)\r\n", FR_Table[result]);
    }
    else
    {
        printf("挂载文件系统成功 (%s)\r\n", FR_Table[result]);
    }
    
    /* 第2步:打开两个文件********************************************************************/
    fr = f_open(&fsrc, "1:/txt/nel.txt", FA_OPEN_EXISTING | FA_READ);
    if (fr != FR_OK)
    {
        printf("打开失败 (%s)\r\n", FR_Table[fr]);
    }
    else
    {
        printf("打开成功 (%s)\r\n", FR_Table[fr]);
    }


    fr = f_open(&fdst, "1:/txt/nel1.txt", FA_CREATE_ALWAYS | FA_WRITE);
    if (fr != FR_OK)
    {
        printf("打开失败 (%s)\r\n", FR_Table[fr]);
    }
    else
    {
        printf("打开成功 (%s)\r\n", FR_Table[fr]);
    }
    
    Count = 0;
    FinishPecent = 0.0f;
    
    /* 第3步:将文件nel.txt中的内容复制到nel1.txt里面****************************************/
    for (;;) 
    {
        fr = f_read(&fsrc, buffer, sizeof buffer, &br);    /* 从源文件中读4K数据 */
                                                           /* 串口打印复制率 */
        Count = Count + 1;
        FinishPecent = (float)(Count* 4096) / fsrc.fsize;
        printf("错误类型 = %s 当前已经复制%.2f     \r", FR_Table[fr], FinishPecent);


        if (fr || br == 0) break;                         /* 出现错误或者已经读完 */


        
        fr = f_write(&fdst, buffer, br, &bw);            /* 从源文件读出的内容写入多目的文件中 */
        if (fr || bw < br) break;                        /* 写入出错或者磁盘已满 */
    }
    
    printf("\r\n");                                      /* 换行 */


    /* 关闭打开的两个文件 */
    f_close(&fsrc);
    f_close(&fdst);


    
    /* 最后一步:卸载文件系统 */
    result  = f_mount(NULL, "1:", 1);
    if (result != FR_OK)
    {
        printf("卸载文件系统失败 (%s)\r\n", FR_Table[result]);
    }
    else
    {
        printf("卸载文件系统成功 (%s)\r\n", FR_Table[result]);
    }
}




fatfs是一个轻量级的文件系统模块,用于在嵌入式系统中管理文件和存储设备。而f_write函数fatfs库中的一个函数,用于向文件中写入数据。 在使用fatfs的f_write函数时,需要先打开一个文件,然后通过调用f_write函数向该文件中写入数据。f_write函数的原型如下: ``` FRESULT f_write ( FIL* fp, // 文件指针 const void* buff, // 数据缓冲区指针 UINT btw, // 要写入的字节数 UINT* bw // 实际写入的字节数 ); ``` 参数说明如下: - fp:文件指针,指向已经打开的文件 - buff:数据缓冲区指针,即要写入文件的数据 - btw:要写入的字节数,即数据的长度 - bw:实际写入的字节数,函数执行后会将实际写入的字节数保存到该指针所指的变量中 f_write函数返回一个FRESULT类型的值,表示操作的结果。如果返回值为FR_OK,则表示写入操作成功;否则,表示写入操作失败,具体的错误信息可以通过调用f_strerror函数来获取。 在使用f_write函数时,需要注意以下几点: - 写入数据的长度不能超过文件的剩余空间,否则写入操作会失败; - 写入文件之前,需要确保文件已经被打开,并且文件指针正确; - 写入文件时,需根据具体情况判断是否需要对写入的数据进行分块处理,以保证数据的完整性和性能的效率; 总之,通过fatfs的f_write函数可以方便地向文件中写入数据,是嵌入式系统中管理文件的一个重要功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值