STM32利用FATFS文件系统删除SD卡中的文件夹

        本博客上接STM32利用FATFS文件系统给SD卡读写数据

        STM32开发项目中遇到:配套基于文件系统管理的SD卡在长时间运行下数据占满SD卡而导致系统宕机。这种时候需要对SD卡内存进行管理:对于共性数据文件夹在长期运行下,一些冗余的数据文件、文件夹等需要删除,可以使用文件系统去帮助删除文件夹。

1、删除空文件夹或者文件

        如果遇到的删除对象是一个空文件夹或者一个文件(.txt、.dat)时,使用C++官方提供的库函数:f_unlink(path); //path为文件路径或者文件夹路径

2、删除有子文件的文件夹

        如果删除对象为一个装有子文件(文件夹、文件等)的文件夹,需要通过循环扫描文件夹中的文件类型然后递归删除。

        如果文件夹中的子文件类型为文件夹则需要递归扫描删除文件夹;如果子文件为文件类型则将其直接删除。整个删除文件夹的程序见下方示例程序(亲测,在项目中已实现功能)。此程序从C语言官网网站函数[f_readdir(DIR* dp,FILINFO* fno)]所给样例程序修改而来。

typedef char TCHAR;

FRESULT f_deldir (TCHAR* path)//path为需要删除的文件夹
{
	FRESULT res;
	res = scan_files_del(path);
	return res;
}
FRESULT scan_files_del(TCHAR* path)//递归删除文件
{
	FRESULT res;
	DIR dir;
	UINT i;
	static FILINFO fno;

	res = f_opendir(&dir, path);//打开此文件夹
	if (res == FR_OK){//成功打开文件夹
		for (;;){//循环扫描文件夹和文件
			res = f_readdir(&dir, &fno);//读取此文件家中的一个子文件
			if (res != FR_OK || fno.fname[0] == 0) break;//读取错误或者已经扫描完此文件夹下的所有文件,跳出循环
			if (fno.fattrib & AM_DIR) {//子文件为文件夹
				i = strlen(path);//统计附文件夹路径长度
				sprintf((char*)&path[i], "\\%s", fno.fname);//将子文件夹名加入路径
				res = scan_files_del(path);//递归进入子文件夹,扫描文件夹
				if (res != FR_OK) break;//操作失败跳出循环
				path[i] =0;//文件路径回退
			}
			else {//子文件为  文件类型
				i = strlen(path);//统计附文件夹路径长度
				sprintf((char*)&path[i], "\\%s", fno.fname);//将子文件名加入路径
				res=f_unlink(path);//删除子文件
				path[i] =0;//文件路径回退
			}
		}
		res=f_closedir(&dir);//挂你打开的父文件夹
		res=f_unlink(path);//删除已经清空的父文件夹
	}
	return res;
}

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在使用STM32HAL库进行串口断接收数据时,可以按照以下步骤进行操作: 1. 在代码定义一个接收缓冲区,用于存放接收到的数据。例如,可以使用一个数组来存放接收到的数据,如引用\[1\]的`uint8_t Rdata`。 2. 注册断函数。在断函数,可以使用`HAL_UART_IRQHandler`函数来清空断标志,取消断使能,并调用回调函数。同时,可以将接收到的数据存放到接收缓冲区,如引用\[3\]的代码所示。 3. 在主程序,可以通过调用`HAL_UART_Receive_IT`函数来启动串口接收断。该函数会在每接收到一个字符时触发一次断,并将接收到的字符存放到接收缓冲区。 通过以上步骤,就可以实现STM32HAL库串口断接收数据的功能。 #### 引用[.reference_title] - *1* *2* [STM32HAL库断模式串口收发](https://blog.csdn.net/ABCisCOOL/article/details/113977863)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [STM32串口接收断——基于HAL库](https://blog.csdn.net/a154299/article/details/86652801)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值