初级会员

- 积分
- 154
- 金钱
- 154
- 注册时间
- 2019-9-25
- 在线时间
- 65 小时
|
20金钱
想问一下各位大佬,本人使用在stm32f103上移植了fatfs文件系统读写sd卡的内容,想要存储一些内容保存为书签文件(自定义的文件,文件名为bookmarkx,x为1~10)在sd卡中,规则是书签文件只能有10个,新的书签文件会替代旧的书签文件。自定义了一个函数u8 s_files(u8*path),功能是先利用另外定义两个的函数查看已存储书签的次数cnt1和该sd卡根目录下已有的书签数目cnt2(这两个函数也都用到了fatffs的读写操作,但分别独立封装),选择是新建还是替换书签文件后,在指定路径存储内容,保存为一个文件,然后显示另一个路径的文件。代码如下
u8 s_files(u8*path)
{
FIL fil;
char buffer[20*MAXSIZE]="";//要存储的内容
FRESULT res;
DIR dir;
FILINFO*finfo=0;
u8*fn=0;
u8*pathp=0;
u8 va;
int i=0;
u32 num2=6;//要存储的数据
u32 num1=5;//要存储的数据
finfo =(FILINFO*)mymalloc(SRAMIN,sizeof(FILINFO));
finfo->lfsize=_MAX_LFN*2+1; //511
finfo->lfname= mymalloc(SRAMIN,finfo->lfsize);
pathp=mymalloc(SRAMIN,100);
pathp[0]=0;
mymemset(pathp,0,100);
strcat((char*)pathp,(const char*)path);
strcpy(buffer,(const char*)path);
cnt1=times_Read("0:/num.txt");//读取num.txt的数据
cnt2=scan_Bookmark("0:");//查看已有书签的个数
cnt3=strlen((const char*)buffer);//计算要存入内容的长度
path_Change(cnt1,cnt2);//选择是新建书签文件还是修改已有书签文件
res=f_opendir(&dir,"0:");
if(!res)
{
res=f_open(&fil,(const TCHAR*)path_c,FA_READ|FA_WRITE|FA_CREATE_ALWAYS);
res = f_write(&fil,&num1,sizeof(num1),&bw);
res = f_write(&fil,&num2,sizeof(num2),&bw);
if(!res)
{
do
{
res = f_write(&fil,buffer,cnt3,&bw);
if(res)
break;
}
while (bw <cnt3);
}
}
f_close(&fil);
if(res==FR_OK)
times_Write("0:/num.txt");//写入成功后,创建书签的次数加1
/*显示某一个路径下面的文件*/
res=f_opendir(&dir,(const TCHAR*)pathp);
if(res==0)
{
while(1)
{
va=dir.index;
res=f_readdir(&dir,finfo);
fn=(u8*)(*finfo->lfname?finfo->lfname:finfo->fname);
if(!finfo->fname[0]||res!=FR_OK) break;
if(finfo->fattrib==AM_DIR)
{
Show_Str(60,32+42*i,500,42,fn,32,0);
i++;
}
}
}
f_closedir(&dir);
myfree(SRAMIN,finfo->lfname);
myfree(SRAMIN,finfo);
myfree(SRAMIN,pathp);
return i;
}
在主函数调用这个函数后,无法显示某一路径下的文件,而且屏幕上出现的都是乱码,但书签可以正常创建。想问问各位大佬是什么原因?
|
|