12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /*------------------------------------------------------------/
- / 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; /* Disable LFN output */
- #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 (_FS_RPATH && 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';
- closedir(&dir);
- }
- return fr;
- }
- int main (void)
- {
- FRESULT fr;
- FATFS fs;
- char buff[64]; /* Working buffer */
- f_mount(&fs, "", 0);
- strcpy(buff, "/"); /* Directory to be emptied */
- fr = empty_directory(buff);
- if (fr) {
- printf("Function failed. (%u)\n", fr);
- return fr;
- } else {
- printf("All contents in the %s are successfully removed.\n", buff);
- return 0;
- }
- }
|