2013-05-03 44 views
5

Bir dizinin boş olup olmadığını kontrol etmeye çalışıyorum.Dizin boşsa kontrol edin

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

nedir doğru yolu . ve .. hariç bunu kontrol etmek?

+0

Neden '0' bir dizgidir? – Blender

+0

@Blender benim kötü, sadece kontrol etmek istiyorum, eğer sayı bir bool ise? – highlander141

+1

'.count()' bir tamsayı döndürmelidir, yani "0" ile değil, "0" ile karşılaştırın. – Blender

cevap

20

Bence bu

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

Bu, gitmek için doğru yol. '<3' bir hack olduğunu – UmNyobe

+2

QDir :: AllEntries gizli (ve muhtemelen sistem) dosyaları için yeterli değildir. Onları da kontrol etmelisin. – Kirinyale

1

Bunu yapmanın bir yolu budur.

#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

Neden sadece 'dir.count() <3' ile kontrol etmiyorsun? – HeyYO

+1

@HeyYO: Bu daha iyi bir çözüm gibi görünüyor. Neden cevap vermiyor ve krediyi almıyorsunuz? –

-1

:) Ya da sadece ile kontrol edebilir yapmanın yolu var;

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

Evet, 'QMessageBox' içinde' mydir' değerinin nasıl gösterileceği ??? – highlander141

+1

Bu başka bir soru. Bu, sorduğunuz soruya en basit çözümdür. –

+3

Sihirli sayılar çok kötü bir uygulamadır. Diğer platformlarda farklı olabilir. –

0

Kirinyale belirttiği gibi, gizli ve (soket dosyaları gibi) sistem dosyalarının highlander141 yanıtında sayılmaz. Bunları da saymak için şu yöntemi gözden geçirin:

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