2013-05-03 61 views
5

Tôi đang cố gắng kiểm tra xem thư mục có trống không.Kiểm tra xem thư mục có trống không

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

Làm cách nào để kiểm tra nó, ngoại trừ ...?

+0

Tại sao '0' là một chuỗi? – Blender

+0

@Thanh toán của tôi xấu, chỉ muốn kiểm tra, nếu tính là một bool? – highlander141

+1

'.count()' phải trả về một số nguyên, vì vậy hãy so sánh nó với '0', không phải là' "0" '. – Blender

Trả lời

20

Vâng, tôi có cách để làm điều đó :)

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

đây là cách chính xác để đi. '<3' là một hack – UmNyobe

+2

QDir :: AllEntries không đủ cho các tệp ẩn (và có thể là hệ thống). Bạn cũng nên kiểm tra chúng. – Kirinyale

1

Đây là một cách để thực hiện.

#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

Tại sao không chỉ kiểm tra với 'dir.count() <3'? – HeyYO

+1

@HeyYO: Điều đó có vẻ giống như một giải pháp tốt hơn .. Tại sao không trả lời và nhận tín dụng? –

-1

Hoặc bạn chỉ có thể kiểm tra với;

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

Vâng, cách hiển thị giá trị 'mydir' trong' QMessageBox' ??? – highlander141

+1

Đó là một câu hỏi khác. Đây là giải pháp đơn giản nhất cho câu hỏi bạn đã hỏi. –

+3

Số ma thuật là thực hành rất xấu. Nó có thể khác trên các nền tảng khác. –

0

Vì Kirinyale chỉ ra, các tệp hệ thống và ẩn (như tệp ổ cắm) không được tính trong câu trả lời của highlander141. Để tính những điều này, hãy xem xét phương pháp sau:

bool dirIsEmpty(const QDir& _dir) 
{ 
    QFileInfoList infoList = _dir.entryInfoList(QDir::AllEntries | QDir::System | QDir::NoDotAndDotDot | QDir::Hidden); 
    return infoList.isEmpty(); 
} 
Các vấn đề liên quan