새로운 부스트 v1.5.3을 사용하여 recursive_directory_iterator 클래스 덕분에 다음과 같은 작업을 수행 할 수 있습니다 (재귀 코드 작성 필요 없음) :boost :: filesystem을 사용하여 디렉토리 파일을 재귀 적으로 나열합니다.
void ListDirRec(const char *Dir, vector<string>& DirFileList, const char* ext)
{
recursive_directory_iterator rdi(Dir);
recursive_directory_iterator end_rdi;
DirFileList.empty();
string ext_str0(ext);
for (; rdi != end_rdi; rdi++)
{
rdi++;
//cout << (*di).path().string() << endl;
cout << (*rdi).path().string() << endl;
//cout << " <----- " << (*rdi).path().extension() << endl;
//string ext_str1 = (*rdi).path().extension().string();
if (ext_str0.compare((*rdi).path().extension().string()) == 0)
{
DirFileList.push_back((*rdi).path().string());
}
}
특정 확장자가있는 함수 목록 파일. 이 기능은 경우에 작동하지만 자주 돌아처럼 "주장을 오류를 실패"내가 겨우이 오류의 원인을 파악
**** Internal program error - .... assertion (m_imp.get()) ... operations.hpp(952): dereference of end recursive_directory_iterator
. 어떤 시도를 할 수 있습니까? 당신은 루프 내에서 rdi
를 증가하는
나는 모든하지만 부스트 :: 파일 시스템과 협력하지 않은를 end_rdi에 아무 것도 지정해서는 안됩니까? – dutt
@dutt 아니요, 기본 생성자는 end iterator [(docs)] (http://www.boost.org/doc/libs/1_50_0/libs/filesystem/doc/reference.html#Class- recursive_directory_iterator),'std :: istream_iterator' –
아아, 괜찮아. – dutt