How to remove and rename directories in C language?

2

To create a directory I used the function mkdir (const char *) and to remove I tried to use remove (const char *) as below:

void remove_diretorio() {
 char nome_pasta[10];
 printf("Informe o nome da pasta: ");
 fflush(stdin);
 gets(nome_pasta);
 if(remove(nome_pasta)) {
     Sleep(500);
     printf("Erro ao exlcluir o diretorio!\n");
     printf("%s",strerror(errno));
     system("pause");
     return;
 } else {
     Sleep(500);
     printf("Pasta excluída com sucesso\n");
     system("pause");
 }
}

However, the return is non-zero because it is entering my if. I need to rename too and I can not find references.

Note: remove_diretorio () is a function of my program; my operating system is Windows.

    
asked by anonymous 17.06.2017 / 00:45

1 answer

0

I do not understand much of C and its architecture, but I know it's pretty much like C ++, might be wrong, but I found this function to delete a directory that is not empty:

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;
}

( Font )

To rename, use the rename(oldFilename, newFilename) function. Reference .

    
17.06.2017 / 01:22