- Added selection of character encoding on the file. (_STRF_ENCODE) - Added f_closedir(). - Added forced full FAT scan for f_getfree(). (_FS_NOFSINFO) - Added forced mount feature with changes of f_mount(). - Improved behavior of volume auto detection. - Improved write throughput of f_puts() and f_printf(). - Changed argument of f_chdrive(), f_mkfs(), disk_read() and disk_write(). - Fixed f_write() can be truncated when the file size is close to 4GB. - Fixed f_open(), f_mkdir() and f_setlabel() can return incorrect error code.
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			71 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; /* Eliminate 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 (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 1;
 | |
|     } else {
 | |
|         printf("All contents in the %s are successfully removed.\n", buff);
 | |
|         return 0;
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 |