我的程序流程是这样的:
1.新建一个文件,判断是不是第一次建立,如果是则,新建,将文件头内容写入,关闭文件;不是新建的话,直接关闭
2.再次打开这个文件,开始重复往里面写数据
出现的问题: 如果我新建的文件名为 “20150323.xls”,则SD中会出现两个文件,20150323.xls 和 201503(这个文件没有后缀名),其中20150323.xls中有文件头内容
201503文件将后缀加上后 也有后面重复数据,数据是正确的,但是文件就出现了两个,还有我f_open返回值好像都是对的。程序如下:
while(SD_Initialize()) //?ì??SD?¨
{
printf("SD CARD error!\r\n");
}
printf("SD CARD INITIAL OK!\r\n");
f_mount(&fs,"0:",0);
sprintf(FileName, "%4d%02d%02d.xls",2015,3,23); //文件名
CheckFileExist(); //判断文件是否已经建立,子函数在后面
res=f_open(&myfp,FileName,FA_OPEN_ALWAYS | FA_WRITE|FA_READ);
printf("open code %d \r\n",res);//调试时输出0
for(i=0;i<1000;i++)
{
f_lseek(&myfp,myfp.fsize);
f_printf(&myfp,"%4d-%02d-%02d\t%4d\t%4d\r\n",i,3,21,i,i+1);
f_sync(&myfp);
if(i%50==0)printf("write successful %d times\r\n",i);
delay_ms(1);
}
f_close(&myfp);
while(1)
{
LED=!LED;
delay_ms(500);
}
///以上主函数
//子函数,判断文件是否第一次建立,如果没有建立则建立,如果建立则关闭文件返回。
void CheckFileExist(void)
{
res=f_open(&myfp,FileName,FA_CREATE_NEW|FA_WRITE);
if(res == FR_OK) //file is created first time ,write the title information
{
printf("file new create\r\n");
// f_printf(&myfp,"%4d?ê%2d??%2d????????????\r\n",2015,3,22);
f_printf(&myfp,"HT DATA ON %4d-%02d-%02d\r\n",2015,3,22);
f_sync(&myfp);
f_lseek(&myfp,myfp.fsize);
// f_printf(&myfp,"?±??\t????\t????\r\n");
f_printf(&myfp,"time\thuminity\temperature\r\n");
f_close(&myfp);
}
else if(res == FR_EXIST)
{
f_close(&myfp);
printf("file exist!\r\n");
}
else
{
printf("the result is %d\r\n",res);
f_close(&myfp);
}
} |