遍历目录及其子目录

时间:2018-07-06 06:50:20

标签: c++ qt

我使用这段代码遍历目录及其子目录。我这样做是为了从每个最终子目录中获取一个随机文件的路径并传递到下一个最终子目录。但是,在我的实现中,它遍历了最终子目录中的所有文件。

例如,从/cars/bmw/model1/目录中,仅获取/cars/bmw/model1/f.png路径就足够了。

QDirIterator it(selectedReferenceFullDirectory, QDir::Files, QDirIterator::Subdirectories);

    while(it.hasNext())
    {
     ...
    }

我的子目录如下:

/cars/bmw/model1/h.png
/cars/bmw/model1/f.png
/cars/bmw/model2/q.png
/cars/bmw/model1/hb/a.png
/cars/bmw/model1/sed/y.png
/cars/audi/model2/sed/y.png
...

因此,没有一定数量的子目录。由于目录中有大量照片,因此while循环需要很长时间。您是否有更好的表现的想法?预先感谢

1 个答案:

答案 0 :(得分:0)

我建议不遍历所有文件,而仅遍历子目录。对于每个目录,只需一个文件(随机)。这是我的方法(最简单的解决方案):

QStringList randomFiles(const QString &path)
{
  QDirIterator it(path, QDir::AllDirs | QDir::NoDotAndDotDot,
                  QDirIterator::Subdirectories);
  QStringList filePaths;
  while (it.hasNext())
  {
    it.next();

    QDir dir(it.filePath());
    auto files = dir.entryInfoList(QDir::Files);
    if (files.size() > 0)
    {
      // Take the first file from each directory.
      // This might be a random file too, though.
      filePaths.append(files.at(0).absoluteFilePath());
    }
  }
  return filePaths;
}