2017-03-03 5 views
1

Dies ist eine Folgefrage an boost directory_iterator example - how to list directory files not recursive.Dateien in einem Verzeichnis auflisten, nicht rekursiv, nur Dateien und keine Unterverzeichnisse, mit C++

Das Programm

#include <boost/filesystem.hpp> 
#include <boost/range.hpp> 
#include <iostream> 

using namespace boost::filesystem; 

int main(int argc, char *argv[]) 
{ 
    path const p(argc>1? argv[1] : "."); 

    auto list = [=] { return boost::make_iterator_range(directory_iterator(p), {}); }; 

    // Save entries of 'list' in the vector of strings 'names'. 
    std::vector<std::string> names; 
    for(auto& entry : list()) 
    { 
     names.push_back(entry.path().string()); 
    } 

    // Print the entries of the vector of strings 'names'. 
    for (unsigned int indexNames=0;indexNames<names.size();indexNames++) 
    { 
     std::cout<<names[indexNames]<<"\n"; 
    } 
} 

listet die Dateien in einem Verzeichnis, nicht rekursiv, sondern listet auch die Namen der Unterverzeichnisse. Ich möchte nur die Dateien und nicht die Unterverzeichnisse auflisten.

Wie ändere ich den Code, um dies zu erreichen?

Antwort

4

listet die Dateien in einem Verzeichnis auf, nicht rekursiv, listet aber auch die Namen der Unterverzeichnisse auf. Ich möchte nur die Dateien und nicht Unterverzeichnisse auflisten.

können Sie boost::filesystem::is_directory verwenden Verzeichnisse, um herauszufiltern, und fügen Sie nur Dateien:

std::vector<std::string> names; 
for(auto& entry : list()) 
{ 
    if(!is_directory(entry.path())) 
     names.push_back(entry.path().string()); 
} 
+0

es einen 'directory_entry' als Argument Räumt? Laut [der Dokumentation] (http://www.boost.org/doc/libs/1_46_0/libs/filesystem/v3/doc/reference.html#is_regular_file) wird entweder ein 'file_status' oder ein' Pfad akzeptiert '. –

+1

'is_regular_file' wird andere Dinge überspringen (zum Beispiel Links). Es gibt eine 'is_directory'-Funktion, die möglicherweise besser geeignet ist. Vielleicht 'is_directory (entry.path())'? –

+0

@BenjaminLindley, mein Fehler. Korrigiert – WhiZTiM

Verwandte Themen