Desea escribir una función (una función recursiva es más fácil, pero puede fácilmente quedarse sin espacio de pila en directorios profundos) que enumerará los elementos secundarios de un directorio. Si encuentra un niño que es un directorio, recurse en eso. De lo contrario, eliminas los archivos dentro. Cuando haya terminado, el directorio está vacío y puede eliminarlo a través de syscall. Para enumerar directorios en Unix, puede usar opendir
, readdir
y closedir
. Para eliminarlo, utilice rmdir()
en un directorio vacío (es decir, al final de su función, después de eliminar los elementos secundarios) y unlink()
en un archivo. Tenga en cuenta que en muchos sistemas no se admite el miembro d_type
en struct dirent
; en estas plataformas, deberá usar stat()
y S_ISDIR(stat.st_mode)
para determinar si una ruta dada es un directorio.
En Windows, que va a utilizar FindFirstFile()
/FindNextFile()
enumerar, RemoveDirectory()
en directorios vacíos, y DeleteFile()
para eliminar archivos.
He aquí un ejemplo que podría funcionar en Unix (no está comprobado):
int remove_directory(const char *path)
{
DIR *d = opendir(path);
size_t path_len = strlen(path);
int r = -1;
if (d)
{
struct dirent *p;
r = 0;
while (!r && (p=readdir(d)))
{
int r2 = -1;
char *buf;
size_t len;
/* Skip the names "." and ".." as we don't want to recurse on them. */
if (!strcmp(p->d_name, ".") || !strcmp(p->d_name, ".."))
{
continue;
}
len = path_len + strlen(p->d_name) + 2;
buf = malloc(len);
if (buf)
{
struct stat statbuf;
snprintf(buf, len, "%s/%s", path, p->d_name);
if (!stat(buf, &statbuf))
{
if (S_ISDIR(statbuf.st_mode))
{
r2 = remove_directory(buf);
}
else
{
r2 = unlink(buf);
}
}
free(buf);
}
r = r2;
}
closedir(d);
}
if (!r)
{
r = rmdir(path);
}
return r;
}
gente downvote una pregunta que no encuentran clara o útil. Dado que tu pregunta parece lo suficientemente clara, creo que alguien (no yo) no la encontró útil. – Manuel
No existe un lenguaje como C/C++ –
Tal vez fue downvoted porque la pregunta se ha realizado aquí muchas veces, por ejemplo http://stackoverflow.com/questions/1149764/delete-folder-with-items, y personas están hartos de verlo? El que menospreciaba no era yo, por cierto. –