6

我正在尝试检查目录是否为空。

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!!!");
    }
}

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

4

5 回答 5

24

好吧,我有办法做到这一点:)

if(QDir("/home/highlander/Desktop/dir").entryInfoList(QDir::NoDotAndDotDot|QDir::AllEntries).count() == 0)
{
    QMessageBox::information(this,"Directory is empty","Empty!!!");
}
于 2013-05-03T05:07:53.980 回答
3

由于 Qt 5.9 有bool QDir::isEmpty(...),这是更可取的,因为它更清晰,更快,请参阅文档

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

于 2018-05-20T15:04:40.097 回答
2

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

bool dirIsEmpty(const QDir& _dir)
{
    QFileInfoList infoList = _dir.entryInfoList(QDir::AllEntries | QDir::System | QDir::NoDotAndDotDot | QDir::Hidden );
    return infoList.isEmpty();
}
于 2017-04-03T21:39:15.617 回答
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;
}
于 2013-05-03T05:05:21.873 回答
0

或者你可以检查一下;

if(dir.count()<3){
    ... //empty dir
}
于 2013-05-03T05:20:33.173 回答