Deletando um diretório inteiro recursivamente, suas subpastas e arquivos


Para deletar um diretório inteiro precisamos usar recursão.

Abaixo temos um exemplo de como fazer:


	bool removeAll(const char *folder) {
		DIR     *dir;
		dirent  *dp;

		dir = opendir(folder);
		if (dir == NULL)
			return false;
		
		while(true) {
			dp = readdir(dir);
			if(dp == NULL)
				break;

			if (!strcmp(dp->d_name, ".") || !strcmp(dp->d_name, ".."))
				continue;
			
			char file[1024];
			strcat(file, folder);
			strcat(file, '/');
			strcat(file, dp->d_name);
			strcat(file, '\0');
			
			if (dp->d_type == DT_DIR) {
				removeAll(file);
				if (rmdir(file) != 0)
					return false;
			} else if (dp->d_type == DT_REG) {
				if (remove(file) != 0)
					return false;
			}
		}

		closedir(dir);
		return true;
	}

O tipo de arquivo lido, representado por d_type, pode ser:

- DT_UNKNOWN - The type is unknown. On some systems this is the only value returned.

- DT_REG - A regular file.

- DT_DIR - A directory.

- DT_FIFO - A named pipe, or FIFO. See section 15.3 FIFO Special Files.

- DT_SOCK - A local-domain socket.

- DT_CHR - A character device.

- DT_BLK - A block device.




Comentários

Copyright © 2018 Anderson Bravo
www.andersonbravo.com.br
anderson@andersonbravo.com.br