Die Boost C++ Bibliotheken

Verzeichnisiteratoren

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.

Beispiel 35.18. Über Einträge in einem Verzeichnis iterieren
#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.

Aufgabe

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.