硬汉嵌入式论坛

 找回密码
 立即注册
查看: 754|回复: 3
收起左侧

[FatFs] FATFS文件系统相关问题求助

[复制链接]

2

主题

8

回帖

14

积分

新手上路

积分
14
发表于 2025-2-20 13:27:44 | 显示全部楼层 |阅读模式
在fatfs文件系统中,分别使用两个文件对象freadnew跟fwritenew,打开同一个文件。f_size(&freadnew)的值为7,然后使用f_write(&fwritenew, writebuf, 7,&fnum)向文件中追加7字节的数据,再次调用f_size(&freadnew)的值仍为7而不是14,在不考虑重新打开关闭文件的情况下,怎么实现值变为14呢?使用f_sync(&fwritenew)也不管用.
回复

使用道具 举报

8

主题

53

回帖

77

积分

初级会员

积分
77
发表于 2025-2-20 21:20:51 | 显示全部楼层
本帖最后由 xfcbbs2 于 2025-2-20 21:26 编辑

打开文件,要追加文件内容的话,不能直接调用f_wire(),正确的操作步骤是:

size = f_size(&MyFile);  //step1: 获取文件的大小
if(size >0){ //step2:判断文件的大小                        
res= f_lseek(&MyFile,size);    //step3:指针移至文件尾部, 然后才能追加写入数据                        
}

f_write(&MyFile, fName_buf, strlen(fName_buf), (void *)&wr_bytes); //step4:写入追加的数据        

//再读取文件的大小,就对了!!!

回复

使用道具 举报

2

主题

8

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2025-2-21 08:38:57 | 显示全部楼层
xfcbbs2 发表于 2025-2-20 21:20
打开文件,要追加文件内容的话,不能直接调用f_wire(),正确的操作步骤是:

size = f_size(&MyFile);  // ...

我就是这么做的,现在问题是我用两个文件对象打开了同一个文件,使用fwritenew文件对象追加数据到该文件,文件的大小会变化,但使用f_size(freadnew)的时候,文件的大小是没有变化的
回复

使用道具 举报

8

主题

53

回帖

77

积分

初级会员

积分
77
发表于 2025-2-21 10:10:08 | 显示全部楼层
一个一夕台 发表于 2025-2-21 08:38
我就是这么做的,现在问题是我用两个文件对象打开了同一个文件,使用fwritenew文件对象追加数据到该文件 ...

用两个文件对象,打开了同一个文件,应该采用:互斥访问操作 才可以,不然就是错误的!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-9 22:16 , Processed in 0.229918 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表