readdir исключает некоторые файлы в каталоге

#c #dirent.h

#c #dirent.h

Вопрос:

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

 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 amp;amp; strcmp(entry->d_name, "..") != 0 )
      fileNames.push_back(entry->d_name);
  }
  closedir(pDIR);
 

Комментарии:

1. Вы вызываете readdir() дважды, но обрабатываете только один из результатов, поэтому вы пропускаете половину файлов …

Ответ №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 amp;amp; strcmp(entry->d_name, "..") != 0 )
      fileNames.push_back(entry->d_name);
  }
  closedir(pDIR);