Readdir排除目录中的某些文件

readdir excludes some files in a directory

本文关键字:文件 排除 Readdir      更新时间:2023-10-16

我有一段相当简单的代码,用于在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);

每次迭代执行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);