簡體   English   中英

遍歷目錄及其子目錄

[英]Traversing directories and their sub-directories

我使用這段代碼遍歷目錄及其子目錄。 我這樣做是為了從每個最終子目錄中獲取一個隨機文件的路徑並傳遞到下一個最終子目錄。 但是,在我的實現中,它遍歷了最終子目錄中的所有文件。

例如,從/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循環需要很長時間。 您是否有更好的表現的想法? 預先感謝

我建議不要遍歷所有文件,而只能遍歷子目錄。 對於每個目錄,只需一個文件(隨機)。 這是我要怎么做(最簡單的解決方案):

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM