请教“SD卡文本写入问题”

2019-10-15 06:33发布

各位大侠:
            本人菜鸟,刚接触不久,现在遇到的问题是STM32,SDIO方式控制SD卡,在当前卡内建立文本文件,如123.txt,并写入相关内容。但是我下次又要写入不同的内容到这个123.txt文件,并写入上次内容的后面,怎样实现?

      谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
36条回答
正点原子
1楼-- · 2019-10-15 10:47
前面的步骤你实现了么?
实现了就用读写方式打开123.txt即可.
cug_wxf
2楼-- · 2019-10-15 12:31
前面的步骤实现了,可是用读写方式打开也不行啊。
//res = f_open(&fsrc, "123.txt", FA_CREATE_ALWAYS  | FA_WRITE);  

res = f_open(&fsrc, File_Name, FA_CREATE_ALWAYS );
res = f_open(&fsrc, File_Name, FA_READ | FA_WRITE);
f_write(&fsrc,&fc1,sizeof(fc1),&bw);     //写数据
f_write(&fsrc,&fc2,sizeof(fc2),&bw);     //写数据
f_write(&fsrc,&ADValue,sizeof(ADValue),&bw);  //写数据

同时,对f_lseek(&fsrc,fsrc.fsize);     不了解,望给于解答,谢谢!

非常感谢!
正点原子
3楼-- · 2019-10-15 16:45
 精彩回答 2  元偷偷看……
cug_wxf
4楼-- · 2019-10-15 16:51
你看我上面的程序对吗?读写方式打开。按理说,如果成功,那就是我每复位一次系统按键,就会往卡里写入一次数据,并且不会覆盖之前的数据。应该怎样具体实现啊?
   谢谢!
shihantu
5楼-- · 2019-10-15 18:56
res = f_open(&file, "123.txt", FA_READ | FA_WRITE | FA_OPEN_ALWAYS);//打开文件
res = f_lseek(&file, f_size(&file));//把指针指向文件末端
res = f_write(&file, &data, sizeof(data), &bw);//写入文件  

f_lseek就是把文件的指针指定到某个位置,打开文件时指针是指向0的,就是进行写入操作会从第0个字节开始,f_size()或者file->fsize是file的属性,就是文件的大小。
把文件的大小放到f_lseek,就是把指针放到文件末端再加一个字节,因为超出文件大小,f_lseek会把文件增大一个字节的,这时前面的数据就不会被覆盖。
cug_wxf
6楼-- · 2019-10-15 20:41
非常感谢shihantu,我明白了我为什么加了res = f_lseek(&file, (&file)->fsize);或者res = f_lseek(&file,file.fsize);  
还是不能实现。因为在调用res = f_open(&file, "123.txt", FA_READ | FA_WRITE | FA_OPEN_ALWAYS);的时候,我写成res = f_open(&fsrc, File_Name, FA_CREATE_ALWAYS | FA_WRITE | FA_READ); 
就是因为这个顺序原因。所以在打开文件时“读”必须放在最前面,这样在调用了f_open后,file.fsize便有文件当前大小值,否则,file.fsize值始终为0,即使调用f_lseek,也不能实现。

谢谢!

一周热门 更多>