openblt/Target/Source/third_party/fatfs/doc/img/app2.c

88 lines
1.5 KiB
C

/*------------------------------------------------------------/
/ Remove all contents of a directory
/ This function works regardless of _FS_RPATH.
/------------------------------------------------------------*/
FRESULT empty_directory(
char *path /* Working buffer filled with start directory */
)
{
UINT i, j;
FRESULT fr;
DIR dir;
FILINFO fno;
#if _USE_LFN
fno.lfname = 0; /* Set null pointer because LFN is not needed */
#endif
fr = f_opendir(&dir, path);
if (fr == FR_OK)
{
for (i = 0; path[i]; i++) ;
path[i++] = '/';
for (;;)
{
fr = f_readdir(&dir, &fno);
if (fr != FR_OK || !fno.fname[0])
{
break;
}
if (fno.fname[0] == '.')
{
continue;
}
j = 0;
do
{
path[i+j] = fno.fname[j];
}
while (fno.fname[j++]);
if (fno.fattrib & AM_DIR)
{
fr = empty_directory(path);
if (fr != FR_OK)
{
break;
}
}
fr = f_unlink(path);
if (fr != FR_OK)
{
break;
}
}
path[--i] = '\0';
}
return fr;
}
int main(void)
{
FRESULT fr;
char buff[64]; /* Working buffer */
f_mount(0, &Fatfs);
strcpy(buff, "/"); /* Directory to be emptied */
fr = empty_directory(buff);
if (fr)
{
printf("Function failed. (%u)\n", fr);
return 1;
}
else
{
printf("All contents in the %s are successfully removed.\n", buff);
return 0;
}
}