FRESULT filedir_delete(u8 *path)//删除路径下每一个文件
{
u8 flag=0;
FRESULT res;
DIR dir; /* 文件夹对象 */ //36 bytes
FILINFO fno; /* 文件属性 */ //32 bytes
TCHAR file[_MAX_LFN + 2] = {0};
#if _USE_LFN
TCHAR lname[_MAX_LFN + 2] = {0};
#endif
#if _USE_LFN
fno.lfsize = _MAX_LFN;
fno.lfname = lname; //必须赋初值
#endif
//打开文件夹
res = f_opendir(&dir, (const TCHAR*)path);
//持续读取文件夹内容
while((res == FR_OK) && (FR_OK == f_readdir(&dir, &fno)))
{
//若是"."或".."文件夹,跳过
if(0 == strlen(fno.fname)) break; //若读到的文件名为空
if(0 == strcmp(fno.fname, ".")) continue; //若读到的文件名为当前文件夹
if(0 == strcmp(fno.fname, "..")) continue; //若读到的文件名为上一级文件夹
memset(file, 0, sizeof(file));
#if _USE_LFN
sprintf((char*)file, "%s/%s", path, (*fno.lfname) ? fno.lfname : fno.fname);
#else
sprintf((char*)file, "%s/%s", path, fno.fname);
#endif
if(strcmp(path,"0:")==0)//目标是根目录
{
flag=1;
}
if (fno.fattrib & AM_DIR)
{//若是文件夹,递归删除
res = filedir_delete(file);
}
else
{//若是文件,直接删除
res = f_unlink(file);
}
}
//删除本身
if(res == FR_OK)
{
if(flag==1)
{
return res;
}
else
{
res = f_unlink((const TCHAR*)path);
return res;
}
}
}
参考的是上面这位大佬的程序,但是这个大佬的程序在删除根目录时,虽然可以实现目的但是,返回值会显示错误。错误信息为The path name format is invalid。所以在此基础上加了根目录的判断,经试验可以达到既定要求。特此记录。
PS:本人用的是SD_NAND,初始化后没有fat文件的格式,如果初始化后再格式化FAT格式会相对较麻烦所以才想用这种方式删除根目录下的全部文件。