Removing a non empty directory programmatically in C or C++

后端 未结 8 2486
一生所求
一生所求 2020-11-27 16:50

How to delete a non empty directory in C or C++? Is there any function? rmdir only deletes empty directory. Please provide a way without using any external library.

8条回答
  •  孤街浪徒
    2020-11-27 17:30

    How to delete a non empty folder using unlinkat() in c?

    Here is my work on it:

        /*
         * Program to erase the files/subfolders in a directory given as an input
         */
    
        #include 
        #include 
        #include 
        #include 
        #include 
        #include 
        #include 
        #include 
        void remove_dir_content(const char *path)
        {
            struct dirent *de;
            char fname[300];
            DIR *dr = opendir(path);
            if(dr == NULL)
            {
                printf("No file or directory found\n");
                return;
            }
            while((de = readdir(dr)) != NULL)
            {
                int ret = -1;
                struct stat statbuf;
                sprintf(fname,"%s/%s",path,de->d_name);
                if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, ".."))
                            continue;
                if(!stat(fname, &statbuf))
                {
                    if(S_ISDIR(statbuf.st_mode))
                    {
                        printf("Is dir: %s\n",fname);
                        printf("Err: %d\n",ret = unlinkat(dirfd(dr),fname,AT_REMOVEDIR));
                        if(ret != 0)
                        {
                            remove_dir_content(fname);
                            printf("Err: %d\n",ret = unlinkat(dirfd(dr),fname,AT_REMOVEDIR));
                        }
                    }
                    else
                    {
                        printf("Is file: %s\n",fname);
                        printf("Err: %d\n",unlink(fname));
                    }
                }
            }
            closedir(dr);
        }
        void main()
        {
            char str[10],str1[20] = "../",fname[300]; // Use str,str1 as your directory path where it's files & subfolders will be deleted.
            printf("Enter the dirctory name: ");
            scanf("%s",str);
            strcat(str1,str);
            printf("str1: %s\n",str1);
            remove_dir_content(str1); //str1 indicates the directory path
        }
    

提交回复
热议问题