Pergunta

Então, eu escrevi um pequeno programa para tentar Impulsionar sistema de arquivos.Meu programa vai escrever quantos arquivos há no caminho actual e, em seguida, os nomes de arquivo.Aqui está o meu programa:

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

using namespace boost::filesystem;

int main(){
    directory_iterator start = directory_iterator(current_path());
    directory_iterator di = start;
    int count;
    for (count = 0; di != directory_iterator(); ++di, ++count);
    std::cout << std::endl << "total number of files: " << count << std::endl;
    di = start;
    for (; di != directory_iterator(); ++di){
        std::cout << *di << std::endl;
    }
    return 0;
}

arquivos existentes são program.exe, .laia e .pdb
No entanto tenho a seguinte saída (todo o caminho deixado de fora por questões de brevidade):

$ program.exe
número total de arquivos:3
[..]/programa.pdb
Falha de asserção:m_imp->m_handle != 0 && "erro interno do programa", arquivo c:\program files\boost\boost_1_44\boost\filesystem\v2\operações.a uhe, linha 1001

Se eu fizer um novo directory_iterator em vez disso, ele funciona muito bem:

di = start;
// .. becomes ..
di = directory_iterator(current_path());

Eu notei uma semelhante pergunta relacionados para directory_iterators mas eu não tenho nenhuma idéia do que eles estão se referindo a ou se é o mesmo problema.

A pergunta é:Por que não consigo salvar um startiterator e, em seguida, usar isso para retroceder meu iterador?

Foi útil?

Solução

É o mesmo problema.

O diretório iterador é um passar iterador.Você não pode salvar uma cópia e dar um segundo passo.A cada vez que você incrementar o iterador você obtenha a seguinte entrada, mas você pode diminuir e você não pode voltar e recomeçar, nem mesmo se você salvou uma cópia do ponto de partida.

Se você quiser atravessar duas vezes, você precisa criar outro iterador (e o risco de que o número de arquivos foi alterado).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top