1

我有一段相当简单的代码来获取 C++ 目录中的文件列表。令人费解的是,目录中的 135 个文件中只有 68 个最终存储在矢量文件名中。怎么了?

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);
4

1 回答 1

2

每次迭代都执行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);
于 2016-10-13T13:30:34.903 回答