2013-02-07 41 views
17

Tôi cần xóa tất cả các tệp trong một thư mục bằng Qt.Xóa tất cả các tập tin trong một thư mục

Tất cả các tệp trong thư mục sẽ có phần mở rộng ".txt".

Tôi không muốn xóa chính thư mục đó.

Có ai biết cách tôi có thể thực hiện việc này không? Tôi đã nhìn vào QDir nhưng không có may mắn.

Trả lời

-3

Bạn có thể đạt được điều này mà không cần sử dụng Qt: để làm như vậy, opendir, readdir, hủy liên kết và thậm chí rmdir sẽ là bạn của bạn. Thật dễ sử dụng, chỉ cần duyệt các trang của người đàn ông;).

+8

Nhưng tôi muốn sử dụng QT, như tôi đã nêu trong câu hỏi. – user1794021

1

Bạn đã bắt đầu một cách tốt, xem entryList và tất nhiên chuyển tên trình lọc bạn muốn.

4

Gọi QDir :: entryList (QDir :: Files) để nhận danh sách tất cả các tệp trong thư mục và sau đó cho mỗi tệpName kết thúc bằng ".txt" gọi QDir :: remove (fileName) để xóa tệp tập tin.

0

Đây là cách tôi sẽ làm điều đó:

QString path = "name-of-directory"; 
QDir dir(path); 
dir.setNameFilters(QStringList() << "*.txt"); 
dir.setFilters(QDir::Files); 
while(dir.entryList().size() > 0){ 
    dir.remove(dir.entryList().first()); 
} 
+1

Tôi đã thử với mã của bạn, nhưng nó chỉ xóa một tập tin, và sau đó nó tiếp tục chạy trong vòng lặp cho đến khi nó bị treo ... – Pietro

+1

Bạn nói đúng. Tôi nhận được kết quả tương tự. Xấu hổ với tôi vì không thử nghiệm nó trước khi đăng tải. May mắn rreeves đăng một sửa chữa dưới đây. – Bjorn

+0

Có, mã này không hoạt động. Gây ra vòng lặp vô hạn. – Joel

40

Bjorns trả lời tweeked để không lặp mãi mãi

QString path = "whatever"; 
QDir dir(path); 
dir.setNameFilters(QStringList() << "*.*"); 
dir.setFilter(QDir::Files); 
foreach(QString dirFile, dir.entryList()) 
{ 
    dir.remove(dirFile); 
} 
+3

Làm việc như một sự quyến rũ! :) – zeFree

+4

Điều này phải được đánh dấu là câu trả lời đúng :) – Joel

+0

Có lý do cụ thể nào để sử dụng ký tự đại diện '" *. * "' Không? Nếu tôi muốn xóa TẤT CẢ các tập tin, một dấu sao đơn (như thế này "" * "') shoul là đủ, phải không? –

6

Bỏ qua phần mở rộng lọc txt ... Đây là một cách để xóa mọi thứ trong thư mục , bao gồm các thư mục con không trống:

Trong QT5, bạn có thể sử dụng removeRecursively() trên thư mục. Thật không may, điều đó loại bỏ toàn bộ thư mục - thay vì chỉ xóa nó. Đây là một chức năng cơ bản để chỉ xóa nội dung của một thư mục.

void clearDir(const QString path) 
{ 
    QDir dir(path); 

    dir.setFilter(QDir::NoDotAndDotDot | QDir::Files); 
    foreach(QString dirItem, dir.entryList()) 
     dir.remove(dirItem); 

    dir.setFilter(QDir::NoDotAndDotDot | QDir::Dirs); 
    foreach(QString dirItem, dir.entryList()) 
    { 
     QDir subDir(dir.absoluteFilePath(dirItem)); 
     subDir.removeRecursively(); 
    } 
} 

Hoặc, bạn có thể sử dụng removeRecursively() trên thư mục bạn muốn xóa (sẽ xóa hoàn toàn). Sau đó, tạo lại nó với cùng tên sau đó ... Hiệu ứng sẽ giống nhau, nhưng với ít dòng mã hơn. Tuy nhiên, hàm chi tiết hơn này cung cấp thêm tiềm năng để xử lý ngoại lệ chi tiết được thêm vào nếu muốn, ví dụ: phát hiện vi phạm quyền truy cập vào các tệp/thư mục cụ thể ...

Các vấn đề liên quan