你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

(已解决)STM32文件系统f_lseek如何定位到文件尾

[复制链接]
与龙共舞 提问时间:2018-6-6 18:40 /
本帖最后由 与龙共舞 于 2018-6-7 18:09 编辑

搞了一天,无果,埃。
问题:我搬运原子开发板的程序,想用FATFS,SD卡可以读写文件,现在的问题是我想打开文件--写入文件--关闭文件--打开文件--追加写入。这个追加写入怎么实现呢?
以前上位机我知道有参数传进去就OK,现在没有那个标准C的参数了。。。


  1. void ceshi(void)
  2. {
  3.         u32 fpos;
  4.         u8 res=0;
  5.         char string[100]={0};        
  6.         sprintf(string,"开门%d次,成功%d次,失败%d次,成功率%d%%,最短响应时间%dms,最长响应时间%d ms,平均响应时间%dms",1,2,3,4,5,6,7);
  7.         printf("%s","Log_into_SD\n");
  8.         printf("%d\n",strlen(string));

  9.         res=f_open(&fil,"0:/Report1.txt",(FA_CREATE_ALWAYS|FA_WRITE|FA_READ));
  10.         if(res)
  11.         {                printf("%s","openfail\n");        }
  12.         else
  13.         {
  14.                 //f_lseek(&fil,EOF);  -1 有很大问题-------------------------------------------------------------?
  15.                 // f_lseek(&fil,fil.fsize); 打开以后fil.fsize是0 有问题  下面写完以后fil.fsize变成100--------?
  16.                 printf("begin write\n");
  17.                 res=f_write(&fil,string,sizeof(string),&bww);
  18.                 if(res)
  19.                 {                printf("%s\n","writefail");                }
  20.                 else
  21.                 {
  22.                         f_close(&fil);
  23.                         printf("%s\n","writeOK");
  24.                 }
  25.         }
  26. }
复制代码

网上别人遇到这个问题:
http://www.cnblogs.com/sofunny/p/4103635.html
就是用的 f_lseek 究竟怎么用的?
已解决,
  1. void ceshi(void)
  2. {

  3.                                 u32 fpos;
  4.         u8 res=0;
  5.         char string[100]={0};  
  6.                                 char* hc="\r\n";                               
  7.         sprintf(string,"开门%d次,成功%d次,失败%d次,成功率%d%%,最短响应时间%dms,最长响应时间%d ms,平均响应时间%dms",1,2,3,4,5,6,7);
  8.         printf("%s","Log_into_SD\n");
  9.         printf("%d\n",strlen(string));
  10.         res=f_open(&fil,"0:/Report3.txt",(FA_OPEN_ALWAYS|FA_WRITE));//打开 写
  11.         if(res)
  12.         {printf("%s","openfail\n");}
  13.         else
  14.         {
  15.                 f_lseek(&fil,fil.fsize);
  16.                 printf("begin write\n");
  17.                 res=f_write(&fil,string,sizeof(string),&bww);
  18.                                               res=f_write(&fil,hc,strlen(hc),&bww);//1不能用sizeof2不能混在上面string要单独写
  19.                 if(res)
  20.                 { printf("%s\n","writefail"); }
  21.                 else
  22.                 {
  23.                                                                         f_close(&fil);
  24.                                                                         printf("%s\n","writeOK");
  25.                 }
  26.         }
  27. }
复制代码




收藏 1 评论4 发布时间:2018-6-6 18:40

举报

4个回答
回答时间:2018-6-7 16:11:09
FA_CREATE_ALWAYS,把这个换个方式试试。我估计是因为这个操作重新创建了文件,导致之前的数据丢失了。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

与龙共舞 回答时间:2018-6-7 16:07:06
有没有遇到这个问题。。。。
与龙共舞 回答时间:2018-6-7 17:40:32
安 发表于 2018-6-7 16:11
FA_CREATE_ALWAYS,把这个换个方式试试。我估计是因为这个操作重新创建了文件,导致之前的数据丢失了。 ...

找了好久 结果你一句话就搞定了 是的 改成FA_OPEN_ALWAYS就好了 前面那个可能会暴力创一个新文件。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

stm1024 回答时间:2018-6-7 17:53:27
哈哈,果然,你把打开文件参数搞错了

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版