2013-05-03 16 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

+0

@Blender私の悪い、ちょうどカウントがブールならばチェックしたいですか? – highlander141

+1

'.count()'は整数を返すべきですので、 '' 0 "'ではなく '0'と比較してください。 – Blender

答えて

20

まあ、私は

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

これは正しい方法です。 '<3'はハックです – UmNyobe

+2

QDir :: AllEntriesは、隠されたファイル(システムファイルでも可)では十分ではありません。それらもチェックしてください。 – Kirinyale

1

これはこれを行う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

+1

@HeyYO:それはより良い解決策のように思えます。なぜ答えなくてクレジットを取るのですか? –

-1

:)それを行うための方法を持っそれともあなただけでチェックできます。

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

ええ、 'QMessageBox'に' mydir'の値を表示するには??? – highlander141

+1

それは別の質問です。これはあなたが尋ねた質問に対する最も簡単な解決策です。 –

+3

マジックナンバーは非常に悪いことです。他のプラットフォームでは異なる場合があります。 –

0

Kirinyaleが指摘したように、隠され、(ソケットファイルのような)システムファイルが がhighlander141の答えにはカウントされません。 これらを同様にカウントするには、次の方法を検討してください。

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