2

インターネット全体で、ディレクトリの子の数を取得する方法として、エントリを手動でループしてカウントする方法が受け入れられているようです。これは面倒すぎるように思えます。一般に、子の数を取得するための便利な関数を提供する他のフレームワークや API があり、そのうちの 1 つが QDir::count() です。

ディレクトリ内のエントリ数を効率的に返す POSIX API はありますか? もしそうなら、これは QDir::count() の実装だと思います。そうでない場合は、おそらく多くの人が行っているように、エントリをループして、適切かどうかを数えています。

4

1 に答える 1

4

内部的にはQDir、エントリをリストに読み込んでディレクトリを反復処理します。 QDir::count()そのリストのエントリ数を返します (count()リストがまだ作成されていない場合は、リストに入力されます)。

qtbase/src/corelib/io/qdir.cppの実装については、を参照してください。

  • QDir::count():

    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;
        }
    }
    
于 2014-06-17T20:50:58.523 に答える