检查目录是否为空

时间:2013-05-03 04:41:19

标签: qt qt4

我试图检查目录是否为空。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QDir Dir("/home/highlander/Desktop/dir");
    if(Dir.count() == 0)
    {
        QMessageBox::information(this,"Directory is empty","Empty!!!");
    }
}

检查它的方法是正确的,不包括...

5 个答案:

答案 0 :(得分:21)

好吧,我找到了办法:)

if(QDir("/home/highlander/Desktop/dir").entryInfoList(QDir::NoDotAndDotDot|QDir::AllEntries).count() == 0)
{
    QMessageBox::information(this,"Directory is empty","Empty!!!");
}

答案 1 :(得分:2)

正如Kirinyale所指出的,隐藏和系统文件(如套接字文件) 不计入highlander141的回答。 要计算这些,请考虑以下方法:

bool dirIsEmpty(const QDir& _dir)
{
    QFileInfoList infoList = _dir.entryInfoList(QDir::AllEntries | QDir::System | QDir::NoDotAndDotDot | QDir::Hidden );
    return infoList.isEmpty();
}

答案 2 :(得分:1)

这是一种做法。

#include <QCoreApplication>
#include <QDir>
#include <QDebug>
#include <QDesktopServices>

int main(int argc, char *argv[])
{
    QCoreApplication app(argc,argv);

    QDir dir(QDesktopServices::storageLocation(QDesktopServices::DesktopLocation));

    QStringList list = dir.entryList();
    int count;
    for(int x=0;x<list.count(); x++)
    {
        if(list.at(x) != "." && list.at(x) != "..")
        {
            count++;
        }
    }

    qDebug() << "This directory has " << count << " files in it.";
    return 0;
}

答案 3 :(得分:1)

由于Qt 5.9有bool QDir::isEmpty(...),这是更好的,因为它更清晰,更快,see docs

  

使用过滤器QDir :: AllEntries |等效于count()== 0 QDir :: NoDotAndDotDot,但更快,因为它只检查目录是否包含至少一个条目。

答案 4 :(得分:-1)

或者您可以查看;

if(dir.count()<3){
    ... //empty dir
}