搜索
bottom↓
回复: 20

FATFS怎么追加数据?

[复制链接]

出0入0汤圆

发表于 2011-5-20 12:21:09 | 显示全部楼层 |阅读模式
这是FATFS官网的说明:
The f_write writes data to a file.

FRESULT f_write (
  FIL* FileObject,     /* Pointer to the file object structure */
  const void* Buffer,  /* Pointer to the data to be written */
  UINT ByteToWrite,    /* Number of bytes to write */
  UINT* ByteWritten    /* Pointer to the variable to return number of bytes written */
);

但是好像没有追加数据的功能,麻烦各位高手解释一下,谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-5-20 13:21:31 | 显示全部楼层
这个函数不是覆盖写,是续写,直接用。

出0入0汤圆

发表于 2011-5-20 13:24:48 | 显示全部楼层
简化的过程

res = f_open(&fdst, dstfile, FA_CREATE_ALWAYS | FA_WRITE);//打开文件
size=sizeof(kml_head)-1;
res = f_write(&fdst, kml_head,size, &bw); //写文件头
size=sizeof(kml_1)-1;
res = f_write(&fdst, kml_1,size, &bw); //写坐标1
size=sizeof(kml_2)-1;
res = f_write(&fdst, kml_2,size , &bw);//写坐标2
f_close(&fdst);//文件关闭

出0入0汤圆

发表于 2011-5-20 13:28:11 | 显示全部楼层
&bw 返回每次实际写入的字节数,判断一下防止存储区写满溢出

出0入0汤圆

发表于 2011-5-20 13:31:24 | 显示全部楼层
把文件指针移动到文件结尾,继续写可行不?我感觉应该可行,试试吧。

出0入0汤圆

发表于 2011-5-20 14:25:55 | 显示全部楼层
记下~~

出0入0汤圆

发表于 2011-5-21 14:55:06 | 显示全部楼层
文件关闭后再打开也可以继续写么?菜鸟,来学习一下

出0入0汤圆

发表于 2011-5-21 15:51:41 | 显示全部楼层
res = f_open(&file, file_name, FA_OPEN_ALWAYS | FA_WRITE); //可写方式打开 没有文件则创建
   res = f_lseek(&file, file.fsize); //指针移到文件最后
   res = f_write(&file, Storage_buffer, 420, &br); // 每次需要写的数据为420字节
   res = f_close(&file);//关闭文件

出0入0汤圆

发表于 2011-6-13 19:23:43 | 显示全部楼层
学习了!

出0入0汤圆

发表于 2011-6-13 20:02:05 | 显示全部楼层
回复【7楼】erxun 老孟
   res = f_open(&file, file_name, fa_open_always | fa_write); //可写方式打开 没有文件则创建
   res = f_lseek(&file, file.fsize); //指针移到文件最后  
   res = f_write(&file, storage_buffer, 420, &br); // 每次需要写的数据为420字节  
   res = f_close(&file);//关闭文件

-----------------------------------------------------------------------

res = f_lseek(&file, file.fsize); //指针移到文件最后  
关键是这一句

出0入0汤圆

发表于 2011-6-14 19:18:33 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-11-5 15:22:05 | 显示全部楼层
但是通过这种方式操作之后,文件会有多个NUL字符,也就是所谓的文件尾,请问这个如何消除?

出0入0汤圆

发表于 2014-8-27 09:23:57 | 显示全部楼层
经过测试,8楼11楼的正解

出0入0汤圆

发表于 2014-8-28 10:22:29 | 显示全部楼层
erxun 发表于 2011-5-21 15:51
res = f_open(&file, file_name, FA_OPEN_ALWAYS | FA_WRITE); //可写方式打开 没有文件则创建
   res = f_ ...

不过我又发现一个新问题,
for(i = 0;i<9;i++)
{
        sprintf(filebuff,"%i , " , &i);
        res = f_open(&faddata,"test.txt", FA_CREATE_ALWAYS | FA_WRITE);
        res = f_lseek(&faddata,faddata.fsize);
        res = f_write(&faddata,filebuff,strlen(filebuff), &bw);
        res = f_close(&faddata);
}
这样之后发现test.txt之中只有"8,"
请问大神是什么问题?
谢谢

出0入0汤圆

发表于 2014-8-28 16:33:12 | 显示全部楼层
f_lseek ,读写文件可以直接偏移地址


我想向sd卡中写入csv 文件,然后读取
有没有直接可以写指定行 读指定行的函数
现在方法全部读取文件 然后 '\n'分割 再','分割很麻烦,
高手知道有其他更好的方法没?

出0入0汤圆

发表于 2014-8-29 00:21:01 | 显示全部楼层
snail_dongbin 发表于 2014-8-28 16:33
f_lseek ,读写文件可以直接偏移地址

读指定行的话 好实现  fgets+循环计数  到达那个计数的时候操作
写指定行的话  有点复杂了

出130入129汤圆

发表于 2014-9-7 18:52:05 | 显示全部楼层
snail_dongbin 发表于 2014-8-28 16:33
f_lseek ,读写文件可以直接偏移地址

每行数据等长,读写还能方便一点,但是写时候也只能覆盖,而不能插入的确挺麻烦的。

出0入0汤圆

发表于 2014-9-8 22:44:22 | 显示全部楼层
本帖最后由 xfdr 于 2014-9-8 22:47 编辑

        刚刚试了可以的
  1. f_unlink("0:/test/Test.txt");
  2.         f_mkdir("0:/test");
  3.         fr=f_open(&fil, "0:/test/Test.txt", FA_CREATE_NEW);
  4.         f_close(&fil);//关闭文件
  5.        
  6.         fr=f_open(&fil, "0:/test/Test.txt", FA_WRITE);//向文件写入数据
  7.         f_puts("MAIL:XXXX@126.com QQ:123456789", &fil);
  8.         f_write(&fil,"ABCDEFGH",8,&bw);
  9.         f_close(&fil);//关闭文件
  10.        
  11.         fr=f_open(&fil, "0:/test/Test.txt", FA_WRITE);//向文件追加数据
  12.         fr=f_lseek(&fil,f_size(&fil));//指针移动到文件结尾
  13.         f_puts("I Love WangLi forever",&fil);//再追加数据
  14.         f_close(&fil);//必须关闭文件
  15.        
  16.         fr=f_open(&fil, "0:/test/Test.txt", FA_OPEN_EXISTING|FA_READ);//再打开文件
  17.         f_read(&fil,buff,sizeof(buff),&br);//读完数据文件会被关闭,下次读取需要重新打开
  18.         //f_gets(buffer,sizeof(buffer),&fil);
  19.         f_close(&fil);//关闭文件
  20.         LCD_ShowString(0,110,buff);
复制代码

出0入0汤圆

发表于 2015-3-29 02:05:15 | 显示全部楼层
标记一下,谢谢分享!

出0入0汤圆

发表于 2018-11-15 15:24:27 | 显示全部楼层
snail_dongbin 发表于 2014-8-28 16:33
f_lseek ,读写文件可以直接偏移地址

我现在遇到和你一样的问题。操作CSV, 想读写指定行,又不想每行数据都固定长度浪费读写时间, 请问你后来是怎么做的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-19 04:34

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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