Frage

Ich habe also ein kleines Programm geschrieben, um das Boost-Dateisystem auszuprobieren. Mein Programm wird schreiben, wie viele Dateien dort im aktuellen Pfad und dann die Dateinamen vorhanden sind. Hier ist mein Programm: generasacodicetagpre.

Dateien vorhanden sind programm.exe, .ilk und .pdb
Ich erhalte jedoch den folgenden Ausgang (ganzer Pfad, der für Kürze ausgeliefert wurde):

$ programm.exe
Gesamtzahl der Dateien: 3
[..] / programm.pdb
Behauptung fehlgeschlagen: M_IMP-> M_HANDLE!= 0 && "Interner Programmfehler", Datei C: \ Programmdateien \ boost \ boost_1_44 \ boost \ filesystem \ v2 \ operations.hpp, Zeile 1001

Wenn ich stattdessen einen neuen Verzeichnis_iterator mache, funktioniert es gut: generasacodicetagpre.

Ich bemerkte ein Ähnliche Frage im Zusammenhang mit Verzeichnis_iteratoren Ich habe keine Ahnung, auf was sie beziehen, auf oder wenn es das gleiche Problem ist.

Frage ist: Warum kann ich keinen Startterterator speichern und dann verwenden, um meinen Iterator zurückzuspulen?

War es hilfreich?

Lösung

Es ist das gleiche Problem.

Der Verzeichnis-Iterator ist ein Pass-Iterator.Sie können keine Kopie speichern und einen zweiten Durchgang gehen.Jedes Mal, wenn Sie den Iterator inkrementieren, erhalten Sie den nächsten Eintrag, aber Sie können es nicht dekrementieren, und Sie können nicht zurückkehren und anfangen, nicht einmal, wenn Sie eine Kopie des Startpunkts gespeichert haben.

Wenn Sie zweimal durchqueren möchten, müssen Sie einen anderen Iterator erstellen (und das Risiko, dass sich die Anzahl der Dateien geändert hat).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top