2014-06-17 9 views
2

인터넷을 통해 전체적으로 디렉토리의 하위 카운트를 얻는 방법은 수작업으로 항목을 반복하여 계산하는 것입니다. 이것은 너무 지루하고 일반적으로 QDir :: count() 중 하나 인 하위 카운트를 가져 오는 편리한 함수를 제공하는 다른 프레임 워크 및 API가 있습니다.QDir :: count()의 구현은 무엇입니까

디렉토리의 항목 수를 효율적으로 반환하는 POSIX API가 있습니까? 그렇다면 QDir :: count()의 구현이라고 생각합니다. 그렇지 않다면 아마 많은 사람들이 그것을하고있는 것처럼 끝났을 것입니다. 엔트리를 루핑하고 적절하다면 계산합니다.

+0

당신이 효율성을 걱정하는 경우 타를해야 'QDirIterator' 그 자체를보세요. –

답변

4

내부적으로 QDir은 항목을 목록으로 읽는 디렉토리를 반복합니다. QDir::count()은 해당 목록에있는 항목 수를 반환합니다 (아직 발생하지 않은 경우 count()이 목록을 채 웁니다).

  • QDir::count()의 구현을 위해 qtbase/src/corelib/io/qdir.cpp를 참조하십시오

    uint QDir::count() const 
    { 
        const QDirPrivate* d = d_ptr.constData(); 
        d->initFileLists(*this); 
        return d->files.count(); 
    } 
    
  • QDirPrivate::initFileLists() :

    inline void QDirPrivate::initFileLists(const QDir &dir) const 
    { 
        if (!fileListsInitialized) { 
         QFileInfoList l; 
         QDirIterator it(dir); 
         while (it.hasNext()) { 
          it.next(); 
          l.append(it.fileInfo()); 
         } 
         sortFileList(sort, l, &files, &fileInfos); 
         fileListsInitialized = true; 
        } 
    } 
    
+0

환상적. 고맙습니다. –