在使用fatfs文件管理系统的时候,遇到了调用f_unlink程序就卡死的情况,代码是获取当前目录然后获取对应的文件名,如果直接对文件名进行进行删除,则会出现程序卡死,需要在名称末端增加 \0 字符,放置内存溢出
因为我的应用场景是所有名称程度一致,所以可以通过只修改对应字符串内容来实现修改对应的文件名称
char save_file_name[10][5]; // 保存的文件缓冲
uint8_t save_file_name_count = 0; // 保存的文件数量
char filename_temp[] = "12345.dat";
// 读取目前的文件列表
res_sd = f_opendir(&dir, "0:"); // 打开文件目录
if (res_sd != FR_OK)
return res_sd;
// 循环读出当前目录下的文件
for (;;)
{
res_sd = f_readdir(&dir, &fno); // 读取文件名
if (res_sd != FR_OK)
return res_sd;
if (fno.fname[0] == 0) // 读完所有文件结束就跳出循环
break;
if (fno.fattrib & AM_ARC) // 只对文件类型进行检查
{
strcpy(save_file_name[save_file_name_count++], fno.fname); // 存储数据至文件缓冲
}
}
f_closedir(&dir); // 关闭文件目录
memcpy(filename_temp, save_file_name[0], sizeof(save_file_name[0]));
if (Fatfs_delete(filename_temp) != FR_OK)
return FR_INVALID_NAME;
static char filepath[50];
// 删除对应的文件 删除文件之前,需要关闭该文件
uint8_t Fatfs_delete(char *path)
{
memset(filepath, 0, sizeof(filepath));
strcat(filepath, "0:"); // 更新驱动号
strcat((char *)filepath, path); // 更新文件名
return f_unlink((const TCHAR *)filepath);
}