2013-05-03 22 views
5

Próbuję sprawdzić, czy katalog jest pusty.Sprawdź, czy katalog jest pusty

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

Jaka jest właściwa droga, by go sprawdzić, wyłączając . i ..?

+0

Dlaczego '0' jest łańcuchem? – Blender

+0

@Blender mój zły, po prostu chcesz sprawdzić, czy liczba jest bool? – highlander141

+1

'.count()' powinien zwrócić liczbę całkowitą, więc porównaj ją z '0', a nie' "0" '. – Blender

Odpowiedz

20

Cóż, mam sposób to zrobić :)

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

to jest właściwa droga. '<3' jest hackem – UmNyobe

+2

QDir :: AllEntries nie wystarcza dla ukrytych (i prawdopodobnie systemowych) plików. Powinieneś również sprawdzić je. – Kirinyale

1

To jeden ze sposobów robienia tego.

#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

Dlaczego nie po prostu sprawdzić za pomocą 'dir.count() <3'? – HeyYO

+1

@HeyYO: To wydaje się lepszym rozwiązaniem. Dlaczego nie odebrać kredytu? –

-1

Albo może po prostu skontaktować się z;

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

Tak, jak wyświetlić wartość 'mydir' w' QMessageBox' ??? – highlander141

+1

To kolejne pytanie. Ten jest najprostszym rozwiązaniem zadawanego pytania. –

+3

Magiczne liczby to bardzo zła praktyka. Może się różnić na innych platformach. –

0

Jak Kirinyale wskazał, pliki ukryte i systemowe (takie jak pliki gniazd) nie są liczone w odpowiedzi highlander141 męska. Aby je policzyć, należy rozważyć następującą metodę:

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