与龙共舞 发表于 2018-6-6 18:40:01

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

本帖最后由 与龙共舞 于 2018-6-7 18:09 编辑

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


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

      res=f_open(&fil,"0:/Report1.txt",(FA_CREATE_ALWAYS|FA_WRITE|FA_READ));
      if(res)
      {                printf("%s","openfail\n");      }
      else
      {
                //f_lseek(&fil,EOF);-1 有很大问题-------------------------------------------------------------?
                // f_lseek(&fil,fil.fsize); 打开以后fil.fsize是0 有问题下面写完以后fil.fsize变成100--------?
                printf("begin write\n");
                res=f_write(&fil,string,sizeof(string),&bww);
                if(res)
                {                printf("%s\n","writefail");                }
                else
                {
                        f_close(&fil);
                        printf("%s\n","writeOK");
                }
      }
}
网上别人遇到这个问题:
http://www.cnblogs.com/sofunny/p/4103635.html
就是用的 f_lseek 究竟怎么用的?
已解决,void ceshi(void)
{

                                u32 fpos;
      u8 res=0;
      char string={0};
                                char* hc="\r\n";                               
      sprintf(string,"开门%d次,成功%d次,失败%d次,成功率%d%%,最短响应时间%dms,最长响应时间%d ms,平均响应时间%dms",1,2,3,4,5,6,7);
      printf("%s","Log_into_SD\n");
      printf("%d\n",strlen(string));
      res=f_open(&fil,"0:/Report3.txt",(FA_OPEN_ALWAYS|FA_WRITE));//打开 写
      if(res)
      {printf("%s","openfail\n");}
      else
      {
                f_lseek(&fil,fil.fsize);
                printf("begin write\n");
                res=f_write(&fil,string,sizeof(string),&bww);
                                              res=f_write(&fil,hc,strlen(hc),&bww);//1不能用sizeof2不能混在上面string要单独写
                if(res)
                { printf("%s\n","writefail"); }
                else
                {
                                                                        f_close(&fil);
                                                                        printf("%s\n","writeOK");
                }
      }
}



发表于 2018-6-7 16:11:09

FA_CREATE_ALWAYS,把这个换个方式试试。我估计是因为这个操作重新创建了文件,导致之前的数据丢失了。

与龙共舞 发表于 2018-6-7 16:07:06

有没有遇到这个问题。。。。

与龙共舞 发表于 2018-6-7 17:40:32

安 发表于 2018-6-7 16:11
FA_CREATE_ALWAYS,把这个换个方式试试。我估计是因为这个操作重新创建了文件,导致之前的数据丢失了。 ...

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

stm1024 发表于 2018-6-7 17:53:27

哈哈,果然,你把打开文件参数搞错了
页: [1]
查看完整版本: (已解决)STM32文件系统f_lseek如何定位到文件尾