2013-05-03 95 views
5

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

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

为什么'0'是一个字符串? – Blender 2013-05-03 04:42:58

+0

@Blender我的坏,只是想检查,如果伯爵是一个布尔? – highlander141 2013-05-03 04:44:18

+1

'.count()'应该返回一个整数,所以把它和'0'比较,而不是''0''。 – Blender 2013-05-03 04:45:03

回答

20

好了,我该怎么做吧:)

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

这是正确的方法。 '<3'是一个破解 – UmNyobe 2013-05-03 09:27:30

+2

QDir :: AllEntries是不够的隐藏(和可能系统)的文件。你也应该检查它们。 – Kirinyale 2013-07-05 12:00:08

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; 
} 
+1

为什么不用'dir.count()<3'来检查? – HeyYO 2013-05-03 05:07:20

+1

@HeyYO:这似乎是一种更好的解决方案..为什么不回答并获得信用? – 2013-05-03 05:16:10

-1

或者你可以只用检查的方式;

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

是啊,如何在'QMessageBox'中显示'mydir'的值? – highlander141 2013-05-03 05:22:45

+1

这是另一个问题。这是你问的最简单的解决方案。 – 2013-05-03 05:43:42

+3

魔术数字是非常糟糕的做法。在其他平台上可能会有所不同。 – 2013-05-03 09:42:44

0

由于Kirinyale指出,隐藏和系统文件(如套接字文件) 没有在highlander141的答案计数。 要计数这些,请考虑以下方法:

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