2013-05-03 3 views
5

Sto provando a controllare se una directory è vuota.Controlla se la directory è vuota

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

Che cosa è il modo giusto per controllare, ad esclusione . e ..?

+0

Perché '0' una stringa? – Blender

+0

@Blender my bad, voglio solo controllare, se count è un bool? – highlander141

+1

'.count()' dovrebbe restituire un intero, quindi confrontarlo con '0', non' "0" '. – Blender

risposta

20

Beh, ho avuto il modo di farlo :)

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

questo è il modo corretto per andare. '<3' è un trucco – UmNyobe

+2

QDir :: AllEntries non è sufficiente per i file nascosti (e possibilmente di sistema). Dovresti controllare anche per loro. – Kirinyale

1

Questo è un modo per farlo.

#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

Perché non controllare semplicemente con 'dir.count() <3'? – HeyYO

+1

@HeyYO: Sembra una soluzione migliore. Perché non rispondere e prendere il merito? –

-1

o si può solo controllare con;

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

Sì, come mostrare il valore di 'mydir' in' QMessageBox' ??? – highlander141

+1

Questa è un'altra domanda. Questa è la soluzione più semplice alla domanda che hai posto. –

+3

I numeri magici sono una pessima pratica. Potrebbe essere diverso su altre piattaforme. –

0

Come Kirinyale sottolineato, nascosti e file di sistema (come i file di socket) non vengono conteggiati nella risposta di highlander141. Per contare anche questi, considerare il seguente metodo:

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