Encontrar quantidade de arquivos - C++

Pessoal,

Usei da seguinte função para saber se no diretório existe determinados arquivos:

dado = _findfirst("C:\\CLIENT\\runtime\\restart*.log", &struct_arq);

Se a variável dado for igual à -1L é porque não há arquivos encontrados. Mas o que eu queria saber mesmo é, caso sejam encontrados arquivos, QUANTOS foram?

Se alguém puder ajudar…

Obrigada!

A resposta simples é “você tem de percorrer a lista de arquivos”. Basicamente, você teria de fazer algo como:


int nArquivos = 0;
struct _finddatai64_t fileinfo;
int ret;
intptr_t handle = _findfirsti64 ("*.c", &fileinfo);
if (handle != -1) {
    do {
        nArquivos ++;
        printf ("Arquivo %d - %s\n", nArquivos, fileinfo.name);
        ret = _findnexti64 (handle, &fileinfo);
    } while (ret == 0);
    _findclose (handle);
}

Por favor, olhe a documentação das rotinas no MSDN. Ele é sua Bíblia e seu Alcorão no caso de usar as APIs do Microsoft C++ :slight_smile:

Essa variável “ret” significa o que? O termo em si…

Vlw!

Eu costumo usar “ret” para um valor de retorno que estou com preguiça de dar um nome. Neste caso, _findnexti64 retorna 0 se OK, e algo diferente de zero se houver algum problema.

Nesse caso em particular, eu poderia escrever:

    int nArquivos = 0;  
    struct _finddatai64_t fileinfo;  
    int ret;  
    intptr_t handle = _findfirsti64 ("*.c", &fileinfo);  
    if (handle != -1) {  
        do {  
            nArquivos ++;  
            printf ("Arquivo %d - %s\n", nArquivos, fileinfo.name);  
        } while (SUCCEEDED (_findnexti64 (handle, &fileinfo)));  
        _findclose (handle);  
    } 

Neste caso, SUCCEEDED é uma macro do Windows SDK que retorna true se o valor for zero, e false se o valor for diferente de zero.
Se você olhou a documentação, _findnexti64 retorna 0 se OK, e diferente de zero se houve algum problema (do tipo “acabaram-se os arquivos”).