web-dev-qa-db-de.com

Beispiel für "boost directory_iterator" - Auflisten von nicht rekursiven Verzeichnisdateien

Wie soll ich directory_iterator um Verzeichnisdateien aufzulisten (nicht rekursiv)?

Auch welche Header-Dateien/Bibliotheken soll ich hinzufügen/verlinken oder welche anderen Einstellungen soll ich vornehmen? Ich benutze Boost in meinem Projekt, aber aus irgendeinem Grund directory_iterator ist "underclared identifier", während ich andere Boost-Funktionen verwenden kann.

pdate

Eine andere Lösung:

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

using namespace boost::filesystem;

for (directory_iterator itr(path_ss); itr!=directory_iterator(); ++itr)
{
    cout << itr->path().filename() << ' '; // display filename only
    if (is_regular_file(itr->status())) cout << " [" << file_size(itr->path()) << ']';
    cout << '\n';
}
31
javapowered

Das tut3-Beispiel ist das, wonach Sie suchen:

Sehen Sie es Live auf Colir

Hier ist eine vereinfachte Version basierend auf c ++ 11:

Live On Colir

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

using namespace boost::filesystem;

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

    if(is_directory(p)) {
        std::cout << p << " is a directory containing:\n";

        for(auto& entry : boost::make_iterator_range(directory_iterator(p), {}))
            std::cout << entry << "\n";
    }
}

Sie können sehen, dass ich boost_system (für die Fehlercode-Funktionen) und boost_filesystem verknüpft habe:

g++ -std=c++11 -Os -Wall -pedantic main.cpp -lboost_system -lboost_filesystem && ./a.out .
"." is a directory containing:
"./main.cpp"
"./a.out"
53
sehe

Eine getestete Lösung:

#include <boost/filesystem.hpp>
#include <iterator>
#include <iostream>
#include <vector>

using namespace boost::filesystem;

int main(int argc, char *argv[])
{
    path p(argc>1? argv[1] : ".");
    std::vector<directory_entry> v; // To save the file names in a vector.

    if(is_directory(p))
    {
        copy(directory_iterator(p), directory_iterator(), back_inserter(v));
        std::cout << p << " is a directory containing:\n";

        for ( std::vector<directory_entry>::const_iterator it = v.begin(); it != v.end();  ++ it )
        {
            std::cout<< (*it).path().string()<<endl;
        }    
    }
}
7
Shaobo Zi