(已解决)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");
}
}
}
FA_CREATE_ALWAYS,把这个换个方式试试。我估计是因为这个操作重新创建了文件,导致之前的数据丢失了。 有没有遇到这个问题。。。。 安 发表于 2018-6-7 16:11
FA_CREATE_ALWAYS,把这个换个方式试试。我估计是因为这个操作重新创建了文件,导致之前的数据丢失了。 ...
找了好久 结果你一句话就搞定了 是的 改成FA_OPEN_ALWAYS就好了 前面那个可能会暴力创一个新文件。 哈哈,果然,你把打开文件参数搞错了
页:
[1]