Boost.Filesystem bietet mit boost::filesystem::directory_iterator
einen Iterator an, um über Dateien in einem Verzeichnis zu iterieren. Sehen Sie sich dazu Beispiel 35.18 an.
#include <boost/filesystem.hpp>
#include <iostream>
using namespace boost::filesystem;
int main()
{
path p = current_path();
directory_iterator it{p};
while (it != directory_iterator{})
std::cout << *it++ << '\n';
}
boost::filesystem::directory_iterator
wird mit einer Pfadangabe initialisiert, um einen Iterator zu erhalten, der auf den Anfang eines Verzeichnisses zeigt. Um das Ende eines Verzeichnisses zu erhalten, muss die Klasse mit dem Standardkonstruktor instanziiert werden.
Sie dürfen während einer Iteration Verzeichniseinträge erstellen oder löschen – der Iterator bleibt gültig. Es ist jedoch nicht definiert, ob Verzeichnisänderungen innerhalb der Iteration sichtbar werden. So zeigt der Iterator unter Umständen nicht auf neu erstellte Dateien. Sie müssen die Iteration neu starten, um sicherzugehen, dass Sie auf alle aktuellen Verzeichniseinträge zugreifen können.
Neben boost::filesystem::directory_iterator
stellt Boost.Filesystem mit boost::filesystem::recursive_directory_iterator
einen Iterator zur Verfügung, um rekursiv über Verzeichnisse zu iterieren.
Entwickeln Sie eine Kommandozeilenanwendung, die die Namen aller regulären Dateien mit der Endung cpp
im aktuellen Verzeichnis in die Standardausgabe schreibt. Verzeichnisse zählen nicht zu den regulären Dateien. Verzeichnisnamen, die auf cpp
enden, sollen entsprechend nicht ausgegeben werden.