2013-05-01 5 views
9

Ich möchte über alle Dateien in einem Verzeichnis iterieren und ihren Inhalt drucken. Boost behandelt den Iterationsteil sehr gut, aber ich habe keine Ahnung, wie man das in eine const char * konvertieren kann.Wie man ein boost :: filesystem :: directory_iterator in ein const Zeichen umwandelt *

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

Ich versuchte documentation dies zu lesen, aber so etwas wie string oder c_str() nicht finden konnte. Ich bin neu zu beiden C++ und boost und hoffte, etwas javadoc wie Dokumentation zu finden, die mir im Grunde sagen würde, was die Mitglieder waren und welche Funktionen verfügbar waren, anstatt den Quellcode zu kippen.

Sorry für die Rant, aber könnte mir jemand sagen, wie *path_it in eine c string zu konvertieren.

+0

Es ist in [directory_entry] (http://www.boost.org/doc/libs/1_53_0/libs/filesystem/doc/reference. html # Klassenverzeichnis_eintrag). –

+0

Danke, habe es herausgefunden. Irgendwelche Tipps, wie ich lernen kann, steigern sich auf weniger schmerzhafte Weise? – nikhil

+1

Ich denke, deine beste Wette ist es, Unit-Tests zu versuchen. Oder schreibe sie selbst, um Dinge herauszufinden. –

Antwort

12

Wenn Sie dereferenzieren Iterator es gibt ein directory_entry:

const directory_entry& entry = *path_it; 

Sie können dies mit operator<< zusammen verwenden und ostream, wie Sie entdeckt haben:

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

Sie eine Zeichenfolge erstellen könnte mit ostringstream:

std::ostringstream oss; 

oss << entry; 

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

Alternativ können Sie den Pfad als direkt string Zugriff von directory_entry:

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

Danke für den Kommentar und die Antwort. – nikhil

1

Nach dem Betrachten der Dokumentation denke ich, dass Sie path_it-> path(). C_str() tun können, da ein Verzeichnis_iterator über Verzeichnis_Entry iteriert, die eine Pfadfunktion hat, die wiederum eine c_str-Funktion hat.

+0

Ich musste 'path_it-> path(). String(). C_str()' tun, um es zum Laufen zu bringen. – nikhil

Verwandte Themen