2016-10-13 1 views
0

У меня есть довольно простой фрагмент кода, чтобы получить список файлов в каталоге на C++. Необъяснимо, только 68 из 135 файлов в каталоге в конечном итоге хранятся в файлах fileNames. Что происходит?readdir исключает некоторые файлы в каталоге

DIR* pDIR = opendir(directoryName.c_str()); 
    struct dirent* entry = nullptr; 

    vector<string> fileNames; 

    while(readdir(pDIR)) { 
    entry = readdir(pDIR); 
    if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) 
     fileNames.push_back(entry->d_name); 
    } 
    closedir(pDIR); 
+1

Вы называете READDIR() дважды, но обрабатывать только один из результатов, так что вы пропустите половину файлов ... – Rene

ответ

1

Вы выполняете READDIR 2 раза для каждой итерации. Итак, вы пропускаете половину файлов.

Исправление легко, просто вызовите один раз:

DIR* pDIR = opendir(directoryName.c_str()); 
    struct dirent* entry = nullptr; 

    vector<string> fileNames; 

    while(entry = readdir(pDIR)) { 
    if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) 
     fileNames.push_back(entry->d_name); 
    } 
    closedir(pDIR); 

 Смежные вопросы

  • Нет связанных вопросов^_^