2013-05-01 9 views
9

Voglio ripetere tutti i file in una directory e stampare il loro contenuto. Boost gestisce molto bene la parte di iterazione ma non ho idea di come convertirla in un const char *.Come convertire un boost :: filesystem :: directory_iterator in un const char *

boost::filesystem::directory_iterator path_it(path); 
    boost::filesystem::directory_iterator end_it; 
    while(path_it != end_it){ 
     std::cout << *path_it << std::endl; 

     // Convert this to a c_string 
     std::ifstream infile(*path_it); 
    } 

Ho provato a leggere questo documentation ma non ho trovato nulla di simile string o c_str(). Sono nuovo sia per lo C++ sia per lo boost e speravo di trovare una documentazione simile a javadoc che sostanzialmente mi dicesse cosa erano i membri e quali funzioni erano disponibili invece di scaricare il codice sorgente.

Ci scusiamo per il rant ma qualcuno potrebbe dirmi come convertire in un c string.

+0

E 'in [directory_entry] (http://www.boost.org/doc/libs/1_53_0/libs/filesystem/doc/reference. html # Class-directory_entry). –

+0

Grazie, capito da questo. Qualche consiglio su come posso imparare ad aumentare in modo meno doloroso? – nikhil

+1

Penso che la cosa migliore da fare sia cercare e trovare i test unitari. Oppure scrivili tu stesso per scoprire cose. –

risposta

12

Quando si dereferenziarlo l'iteratore restituisce un directory_entry:

const directory_entry& entry = *path_it; 

È possibile utilizzare questo insieme a operator<< e ostream, come hai scoperto:

std::cout << entry << std::endl; 

è possibile creare una stringa utilizzando ostringstream:

std::ostringstream oss; 

oss << entry; 

std::string path = oss.str(); 

In alternativa, è possibile accedere al percorso come un string direttamente da directory_entry:

std::string path = entry.path().string(); 
+1

Grazie per il commento e la risposta. – nikhil

1

Dopo aver esaminato la documentazione, penso che si possa fare path_it-> path(). C_str() poiché un directory_iterator itera su directory_entry che ha una funzione di percorso che a sua volta ha una funzione c_str.

+0

Avevo bisogno di fare 'path_it-> path(). Stringa(). C_str()' per farlo funzionare. – nikhil