C-在递归函数中remove()不起作用

时间:2018-09-29 13:16:46

标签: c linux

当我在目录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

1 个答案:

答案 0 :(得分:0)

读取readdir上的手册页,它在d_name中返回一个文件名称,不是完整的路径,而是removermdir需要完整路径(或相对于当前工作目录的条目)。

因此,对于函数的每个递归调用,必须构造一条当前所在位置的新路径,并将其传递给递归调用。 (我请您更改代码以实现此目的。)

注意:您还假设,如果既不能删除,也不能删除rmdir,则它必须是目录,并且要递归。但是它不必是目录。您应该检查d_type字段。

注意:删除的手册页说,如果名称是目录,则它将调用rmdir。因此,不需要调用rmdir。