2009-07-19 52 views
21

Làm cách nào để xóa một thư mục có tất cả các tệp/thư mục con của nó (xóa đệ quy) trong C++?Xóa thư mục và tất cả các tệp/thư mục con

+0

Chỉ cần một nút bên: Có một bản sao cho câu hỏi này, nếu bạn không muốn dựa vào tăng, nó là giá trị để có một cái nhìn tại câu trả lời được chấp nhận [có] (http://stackoverflow.com/a/2256974/1312382). – Aconcagua

Trả lời

1

Chuẩn C++ không cung cấp phương tiện làm việc này - bạn sẽ phải sử dụng mã hệ điều hành cụ thể hoặc thư viện đa nền tảng như Boost.

18

Nghiêm túc:

system("rm -rf /path/to/directory") 

Có lẽ nhiều hơn những gì bạn đang tìm kiếm, nhưng unix cụ thể:

/* Implement system("rm -rf") */ 

#include <stdlib.h> 
#include <unistd.h> 
#include <stdio.h> 
#include <sys/syslimits.h> 
#include <ftw.h> 


/* Call unlink or rmdir on the path, as appropriate. */ 
int 
rm(const char *path, const struct stat *s, int flag, struct FTW *f) 
{ 
    int status; 
    int (*rm_func)(const char *); 

    switch(flag) { 
    default:  rm_func = unlink; break; 
    case FTW_DP: rm_func = rmdir; 
    } 
    if(status = rm_func(path), status != 0) 
     perror(path); 
    else 
     puts(path); 
    return status; 
} 


int 
main(int argc, char **argv) 
{ 
    while(*++argv) { 
     if(nftw(*argv, rm, OPEN_MAX, FTW_DEPTH)) { 
      perror(*argv); 
      return EXIT_FAILURE; 
     } 
    } 
    return EXIT_SUCCESS; 
} 
+10

Điều này có được giảm giá vì nó là C thay vì C++ (mặc dù nó biên dịch tốt với g ++ -Wall -Wextra), hoặc bởi vì nền tảng của trình gỡ xuống không có nftw? Bình luận khi bạn downvote, xin vui lòng! Đây là mã rắn. –

+0

Cách di động là 'hệ thống ("rm -rf/path/to/directory") '? Nó có hoạt động trên bất kỳ hệ điều hành * nix nào không? Rõ ràng sẽ không hoạt động trong Windows. –

4

Bạn có thể sử dụng ftw(), nftw(), readdir(), readdir_r() phải đi qua một thư mục và xóa các tập tin đệ quy.
Nhưng vì không phải ftw(), nftw(), readdir() an toàn theo chủ đề, tôi sẽ đề xuất readdir_r() thay vào đó nếu chương trình của bạn chạy trong môi trường nhiều luồng.

Các vấn đề liên quan