2012-01-04 21 views

Odpowiedz

28

Można iteracyjne nad pliki w katalogu z użyciem BOOST_FOREACH takiego:

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

namespace fs = boost::filesystem; 

fs::path targetDir("/tmp"); 

fs::directory_iterator it(targetDir), eod; 

BOOST_FOREACH(fs::path const &p, std::make_pair(it, eod)) 
{ 
    if(fs::is_regular_file(p)) 
    { 
     // do something with p 
    } 
} 
0

Twój dirPath jest albo nie jest to sekwencja, albo jest to sekwencja jest od wielkości 1.

http://www.boost.org/doc/libs/1_48_0/doc/html/foreach.html

BOOST_FOREACH iteracje nad sekwencjami. Ale co dokładnie kwalifikuje się jako sekwencja? Ponieważ BOOST_FOREACH jest zbudowany na Boost.Range, automatycznie obsługuje te typy, które Boost.Range rozpoznaje jako sekwencje. W szczególności BOOST_FOREACH działa z typami, które spełniają koncepcję pojedynczego pasma. Na przykład, możemy użyć BOOST_FOREACH z:

  • kontenerów STL
  • tablice
  • nul strings (char i wchar_t)
  • std :: pair iteratorów

Notatka
Obsługa kontenerów STL jest bardzo ogólna; wszystko, co wygląda jak kontener STL, się liczy. Jeśli ma zagnieżdżone typy iteratorów i const_iterator oraz funkcje funkcji begin() i end(), BOOST_FOREACH będzie automatycznie wiedział, jak iterować po nim. Właśnie w ten sposób boost :: iterator_range <> i boost :: sub_range <> działają z BOOST_FOREACH.

+0

Jakieś sugestie, w jaki sposób mogę naprawić kod (nadal używając BOOST_FOREACH)? – user763305

+0

Musisz przekazać coś FOREACH może iterować jak tablica plików na przykład. W przeciwnym razie nie używaj FOREACH. – clyfe

1

więc domyśliłem brakowało mi łódkę na ten jeden, ale miałem podobny problem, nawet po znalezieniu kodu teoretycznie powinien działać. Problem polega na tym, że boost :: filesystem :: typ danych ścieżki pobiera ostatni znak z ciągu znaków.

Czytałem z pliku, a moja ścieżka to "c: \ one \ two \ three". Ale kiedy uczyniłem go typem danych ścieżki, zmieniono ciąg na "c: \ one \ two \ thre". Nie mam pojęcia, co to jest, ale z tego powodu lokalizacja pliku nie została znaleziona i bla bla bla. To, co zrobiłem, aby to naprawić, to po prostu dodać kolejne "\" do końca. W ten sposób usuwa "\" zamiast "e".

działało dobrze po tym. Ale, jak stwierdzono wcześniej, nie mam pojęcia, dlaczego tak się stało. Mam nadzieję, że to pomaga komuś.