1. 程式人生 > >Qt總結之四:讀取資料夾所有檔案

Qt總結之四:讀取資料夾所有檔案

之前,用標準C++寫過讀取資料夾。
現在用QT重寫程式碼,順便看了下QT如何實現,還是相當簡單的。
主要用到QDir,詳細文件可見這裡

A program that lists all the files in the current directory (excluding symbolic links), sorted by size, smallest first:

 

#include <QDir>

int main(int argc, char *argv[]) {
     QCoreApplication app(argc, argv);     
     QDir dir;
     dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
     dir.setSorting(QDir::Size | QDir::Reversed);
     QFileInfoList list = dir.entryInfoList();
     std::cout << "     Bytes Filename" << std::endl;     
     for (int i = 0; i < list.size(); ++i) {
         QFileInfo fileInfo = list.at(i);
         std::cout << qPrintable(QString("%1%2").arg(fileInfo.size(),10).arg(fileInfo.fileName()));
         std::cout << std::endl;
     }
     return 0;
}

上面的程式碼只列出了當前目錄下的檔案,並沒有遞迴地進入子目錄遍歷。
遞迴遍歷子目錄如下:

QFileInfoList GetFileList(QString path)
{
    QDir dir(path);
    QFileInfoList file_list = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
    QFileInfoList folder_list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);

    for(int i = 0; i != folder_list.size(); i++)
    {
         QString name = folder_list.at(i).absoluteFilePath();
         QFileInfoList child_file_list = GetFileList(name);
         file_list.append(child_file_list);
    }

    return file_list;
}

至於,網頁處理後,需要根據輸入的目錄,生成對應的輸出目錄,可以使用QDir中的mkpath