我试图检查目录是否为空。
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!!!");
}
}
检查它的方法是正确的,不包括.
和..
?
答案 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
}