当我在目录Folder / file.txt上调用该函数时,避免是否构造递归函数。该代码应删除file.txt,但是当它到达
时if (remove(actual->d_name) != 0 && rmdir(actual->d_name) != 0){
删除不起作用,我也不知道为什么...
void borrarrecursivo(DIR *directorio){
struct dirent *actual;
while(((actual = readdir(directorio)) != NULL) && (actual->d_name) != NULL){
if ((strcmp(actual->d_name, ".") != 0) && (strcmp(actual->d_name, "..") != 0)){
if (remove(actual->d_name) != 0 && rmdir(actual->d_name) != 0){
DIR *siguiente;
if ((siguiente = opendir(actual->d_name)) != NULL){
borrarrecursivo(siguiente);
}
}
}
}
closedir(directorio);
//}
}//fin borrarrecursivo
答案 0 :(得分:0)
读取readdir
上的手册页,它在d_name
中返回一个文件名称,不是完整的路径,而是remove
和rmdir
需要完整路径(或相对于当前工作目录的条目)。
因此,对于函数的每个递归调用,必须构造一条当前所在位置的新路径,并将其传递给递归调用。 (我请您更改代码以实现此目的。)
注意:您还假设,如果既不能删除,也不能删除rmdir,则它必须是目录,并且要递归。但是它不必是目录。您应该检查d_type
字段。
注意:删除的手册页说,如果名称是目录,则它将调用rmdir。因此,不需要调用rmdir。