标签:
转载请注明出处:http://blog.csdn.net/u011833609/article/details/47803551
//==================================================================================================== //函 数 名 : f_deldir //函数功能 : 移除一个文件夹,包括其本身和其子文件夹,子文件 //输 入 : const TCHAR *path---指向要移除的空结尾字符串对象的指针 //输 出 : 无 //返 回 值 : FR_OK(0): 函数成功 // FR_NO_FILE: 无法找到文件或目录 // FR_NO_PATH: 无法找到路径 // FR_INVALID_NAME: 文件名非法 // FR_INVALID_DRIVE: 驱动器号非法 // FR_DENIED: 函数由于以下原因被拒绝: // 对象属性为只读; // 目录下非空; // 当前目录。 // FR_NOT_READY: 磁盘驱动器无法工作,由于驱动器中没有媒体或其他原因 // FR_WRITE_PROTECTED: 媒体写保护 // FR_DISK_ERR: 函数失败由于磁盘运行的一个错误 // FR_INT_ERR: 函数失败由于一个错误的 FAT 结构或内部错误 // FR_NOT_ENABLED: 逻辑驱动器没有工作区 // FR_NO_FILESYSTEM: 驱动器上没有合法的 FAT 卷 // FR_LOCKED: 函数被拒由于文件共享机制(_FS_SHARE) //备 注 : f_deldir 函数用来移除一个文件夹及其子文件夹、子文件,但不能移除已经打开的对象。 //==================================================================================================== FRESULT f_deldir(const TCHAR *path) { 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, 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 (fno.fattrib & AM_DIR) {//若是文件夹,递归删除 res = f_deldir(file); } else {//若是文件,直接删除 res = f_unlink(file); } } //删除本身 if(res == FR_OK) res = f_unlink(path); return res; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
FATFS-f_deldir-删除文件夹(删除子文件夹及文件连同其本身)
标签:
原文地址:http://blog.csdn.net/u011833609/article/details/47803551