2009-07-19 13 views
21

मैं C++ में अपनी सभी फ़ाइलों/उपनिर्देशिकाओं (रिकर्सिव डिलीशन) के साथ फ़ोल्डर को कैसे हटा सकता हूं?फ़ोल्डर और सभी फाइलें/उपनिर्देशिकाएं हटाएं

+0

बस एक तरफ नोड: यदि आप बूस्ट पर भरोसा नहीं करना चाहते हैं, तो इस सवाल के लिए एक डुप्लिकेट है, स्वीकार्य उत्तर [वहां] पर एक नज़र रखना उचित है (http://stackoverflow.com/a/2256974/1,312,382)। – Aconcagua

उत्तर

1

मानक सी ++ ऐसा करने का कोई साधन नहीं प्रदान करता है - आपको ऑपरेटिंग सिस्टम विशिष्ट कोड या बूस्ट जैसे क्रॉस-प्लेटफ़ॉर्म लाइब्रेरी का उपयोग करना होगा।

18
गंभीरता से

:

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

शायद अधिक आप जो खोज रहे हैं, लेकिन यूनिक्स विशिष्ट:

/* 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

क्या यह डाउनवॉटेड था क्योंकि यह सी ++ के बजाय सी है (हालांकि यह g ++ -Wall -Wextra के साथ ठीक है), या डाउनवॉटर के प्लेटफ़ॉर्म में nftw नहीं है? जब आप डाउनवोट करते हैं तो टिप्पणी करें, कृपया! यह ठोस कोड है। –

+0

कैसे पोर्टेबल 'सिस्टम (" आरएम-आरएफ/पथ/से/निर्देशिका ") है? क्या यह किसी भी * निक्स ओएस पर काम करेगा? स्पष्ट रूप से विंडोज़ में काम नहीं करेगा। –

4

आप ftw()readdir_r() उपयोग कर सकते हैं, nftw(), readdir(), फ़ाइलें एक निर्देशिका पार और नष्ट करने के लिए रिकर्सिवली।
लेकिन चूंकि न तो ftw(), nftw(), readdir() थ्रेड-सुरक्षित है, इसलिए यदि आपका प्रोग्राम बहु-थ्रेडेड वातावरण में चलता है तो मैं readdir_r() की अनुशंसा करूंगा।

संबंधित मुद्दे