2013-05-03 127 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(); 
}