// 测试目录文件如下:
// XML
// XML中朝
// XML中朝中朝近
// XML中朝中朝近中朝近.txt
// XML中朝文件3.txt
// XML中印
// XML中印中印内
// XML中印中印内中印内.txt
// XML中印文件2.txt
// XML文件1.txt
.pro
1 QT += core gui 2 3 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 4 5 CONFIG += c++11 6 7 # The following define makes your compiler emit warnings if you use 8 # any Qt feature that has been marked deprecated (the exact warnings 9 # depend on your compiler). Please consult the documentation of the 10 # deprecated API in order to know how to port your code away from it. 11 DEFINES += QT_DEPRECATED_WARNINGS 12 13 # You can also make your code fail to compile if it uses deprecated APIs. 14 # In order to do so, uncomment the following line. 15 # You can also select to disable deprecated APIs only up to a certain version of Qt. 16 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 17 18 SOURCES += 19 main.cpp 20 mainwindow.cpp 21 22 HEADERS += 23 mainwindow.h 24 25 FORMS += 26 mainwindow.ui 27 28 # Default rules for deployment. 29 qnx: target.path = /tmp/$${TARGET}/bin 30 else: unix:!android: target.path = /opt/$${TARGET}/bin 31 !isEmpty(target.path): INSTALLS += target
main.cpp
1 #include "mainwindow.h" 2 3 #include <QApplication> 4 5 int main(int argc, char *argv[]) 6 { 7 QApplication a(argc, argv); 8 MainWindow w; 9 w.show(); 10 return a.exec(); 11 }
mainwindow.h
1 #ifndef MAINWINDOW_H 2 #define MAINWINDOW_H 3 4 #include <QMainWindow> 5 6 #include <QApplication> 7 #include <QDir> 8 #include <QDebug> 9 #include <QStandardItemModel> 10 #include <QStandardItem> 11 12 #include "AllFilesOrPathInDir.h" 13 14 QT_BEGIN_NAMESPACE 15 namespace Ui { class MainWindow; } 16 QT_END_NAMESPACE 17 18 class MainWindow : public QMainWindow 19 { 20 Q_OBJECT 21 22 public: 23 MainWindow(QWidget *parent = nullptr); 24 ~MainWindow(); 25 26 private slots: 27 void on_pushButton_clicked(); 28 29 void on_pushButton_2_clicked(); 30 31 void on_pushButton_3_clicked(); 32 33 void on_pushButton_4_clicked(); 34 35 void on_pushButton_5_clicked(); 36 37 void on_pushButton_6_clicked(); 38 39 void on_pushButton_7_clicked(); 40 41 void on_pushButton_8_clicked(); 42 43 void on_pushButton_9_clicked(); 44 45 private: 46 Ui::MainWindow *ui; 47 AllFilesOrPathInDir *m_pAllFileDir; 48 QString m_sPath; 49 QStringList m_oFilePathNames; 50 QStandardItemModel *m_pItemModel; 51 52 }; 53 #endif // MAINWINDOW_H
mainwindow.cpp
1 #include "mainwindow.h" 2 #include "ui_mainwindow.h" 3 4 // 测试目录文件如下: 5 // XML 6 // XML中朝 7 // XML中朝中朝近 8 // XML中朝中朝近中朝近.txt 9 // XML中朝文件3.txt 10 // XML中印 11 // XML中印中印内 12 // XML中印中印内中印内.txt 13 // XML中印文件2.txt 14 // XML文件1.txt 15 16 MainWindow::MainWindow(QWidget *parent) 17 : QMainWindow(parent) 18 , ui(new Ui::MainWindow) 19 { 20 ui->setupUi(this); 21 22 m_sPath = QCoreApplication::applicationDirPath() + "/XML"; 23 m_pAllFileDir = new AllFilesOrPathInDir(m_sPath); 24 m_pItemModel = new QStandardItemModel(this); 25 ui->listView->setModel(m_pItemModel); 26 } 27 28 MainWindow::~MainWindow() 29 { 30 delete m_pItemModel; 31 delete ui; 32 } 33 34 void MainWindow::on_pushButton_clicked() 35 { 36 QString dirpath = QCoreApplication::applicationDirPath() + "/XML"; 37 //设置要遍历的目录 38 QDir dir(dirpath); 39 //设置文件过滤器 40 QStringList nameFilters; 41 //设置文件过滤格式 42 nameFilters << "*.txt"; 43 //将过滤后的文件名称存入到files列表中 44 QStringList files = dir.entryList(nameFilters, QDir::Files|QDir::Readable, QDir::Name); 45 46 // 47 QStandardItemModel *oItemModel = new QStandardItemModel(this); 48 for(int i = 0; i < files.count(); i++) 49 { 50 QStandardItem *oItem = new QStandardItem(files[i]); 51 oItemModel->appendRow(oItem); 52 } 53 ui->listView->setModel(oItemModel); 54 // 结果 55 // 文件1.txt 56 } 57 58 void MainWindow::on_pushButton_2_clicked() 59 { 60 // 输出结果 61 m_pItemModel->clear(); 62 // 截取到的是文件夹的路径 63 m_oFilePathNames = m_pAllFileDir->getFilePathNameOfSplDir(m_sPath, true); 64 for(int i = 0; i < m_oFilePathNames.count(); i++) 65 { 66 QStandardItem *oItem = new QStandardItem(m_oFilePathNames[i]); 67 m_pItemModel->appendRow(oItem); 68 } 69 // 截取的是文件夹所在路径 70 m_oFilePathNames = m_pAllFileDir->getFilePathNameOfSplDir(m_sPath, false); 71 for(int i = 0; i < m_oFilePathNames.count(); i++) 72 { 73 QStandardItem *oItem = new QStandardItem(m_oFilePathNames[i]); 74 m_pItemModel->appendRow(oItem); 75 } 76 // 结果 77 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/文件1.txt 78 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML 79 } 80 81 void MainWindow::on_pushButton_3_clicked() 82 { 83 // 输出结果 84 m_pItemModel->clear(); 85 // 输出结果 86 m_oFilePathNames = m_pAllFileDir->getDirPathOfSplDir(m_sPath); 87 for(int i = 0; i < m_oFilePathNames.count(); i++) 88 { 89 QStandardItem *oItem = new QStandardItem(m_oFilePathNames[i]); 90 m_pItemModel->appendRow(oItem); 91 } 92 // 结果 93 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/中印 94 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/中朝 95 } 96 97 void MainWindow::on_pushButton_4_clicked() 98 { 99 // 输出结果 100 m_pItemModel->clear(); 101 // 输出结果 102 m_oFilePathNames = m_pAllFileDir->getFileAndDirPathNameOfSplDir(m_sPath); 103 for(int i = 0; i < m_oFilePathNames.count(); i++) 104 { 105 QStandardItem *oItem = new QStandardItem(m_oFilePathNames[i]); 106 m_pItemModel->appendRow(oItem); 107 } 108 // 结果 109 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/文件1.txt 110 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/中印 111 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/中朝 112 } 113 114 void MainWindow::on_pushButton_5_clicked() 115 { 116 QString sCount = QStringLiteral("文件数量为:%1 "); 117 ui->label->setText(sCount.arg(m_pAllFileDir->fileConutInSplDir(m_sPath))); 118 } 119 120 void MainWindow::on_pushButton_6_clicked() 121 { 122 QString sCount = QStringLiteral("目录数量为:%1 "); 123 ui->label_2->setText(sCount.arg(m_pAllFileDir->dirCountInSplDir(m_sPath))); 124 } 125 126 void MainWindow::on_pushButton_7_clicked() 127 { 128 // 输出结果 129 m_pItemModel->clear(); 130 // 输出结果 131 m_oFilePathNames = m_pAllFileDir->getFilePathNameOfSplAndChildDir(m_sPath); 132 for(int i = 0; i < m_oFilePathNames.count(); i++) 133 { 134 QStandardItem *oItem = new QStandardItem(m_oFilePathNames[i]); 135 m_pItemModel->appendRow(oItem); 136 } 137 // 结果 138 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/文件1.txt 139 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/中印/文件2.txt 140 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/中朝/文件3.txt 141 } 142 143 void MainWindow::on_pushButton_8_clicked() 144 { 145 // 输出结果 146 m_pItemModel->clear(); 147 // 输出结果 148 m_oFilePathNames = m_pAllFileDir->getDirPathOfSplAndChildDir(m_sPath); 149 for(int i = 0; i < m_oFilePathNames.count(); i++) 150 { 151 QStandardItem *oItem = new QStandardItem(m_oFilePathNames[i]); 152 m_pItemModel->appendRow(oItem); 153 } 154 // 结果 155 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/中印 156 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/中朝 157 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/中印/中印内 158 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/中朝/中朝近 159 } 160 161 void MainWindow::on_pushButton_9_clicked() 162 { 163 // 输出结果 164 m_pItemModel->clear(); 165 // 输出结果 166 m_oFilePathNames = m_pAllFileDir->getFileAndDirPathNameOfSplAndChildDir(m_sPath); 167 for(int i = 0; i < m_oFilePathNames.count(); i++) 168 { 169 QStandardItem *oItem = new QStandardItem(m_oFilePathNames[i]); 170 m_pItemModel->appendRow(oItem); 171 } 172 // 结果 173 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/文件1.txt 174 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/中印 175 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/中印/文件2.txt 176 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/中印/中印内 177 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/中印/中印内/中印内.txt 178 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/中朝 179 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/中朝/文件3.txt 180 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/中朝/中朝近 181 // E:/QtDemoRelease/QtGetAllFileAndDir/QtGetAllFileAndDir/bin/XML/中朝/中朝近/中朝近.txt 182 }
AllFilesOrPathInDir.h
1 #ifndef ALLFILESORPATHINDIR_H 2 #define ALLFILESORPATHINDIR_H 3 4 #include <QDir> 5 #include <QString> 6 #include <QStringList> 7 8 class AllFilesOrPathInDir 9 { 10 public: 11 AllFilesOrPathInDir(); 12 /**构造函数 目录的路径 */ 13 AllFilesOrPathInDir(QString dirPath); 14 /** 设置目录 目标文件夹的目录 */ 15 void setDirPath(QString dirPath); 16 /** 获取指定目录下的文件路径+名称 目标文件夹的目录 */ 17 QStringList getFilePathNameOfSplDir(QString dirPath, bool isShowFile); 18 /** 获取在指定目录下的目录的路径 */ 19 QStringList getDirPathOfSplDir(QString dirPath); 20 /** 获取指定目录下的文件和目录的全路径 */ 21 QStringList getFileAndDirPathNameOfSplDir(QString dirPath); 22 /** 在指定文件夹下的文件数 */ 23 int fileConutInSplDir(QString dirPath); 24 /** 在指定文件夹下的目录数 */ 25 int dirCountInSplDir(QString dirPath); 26 /** 获取指定目录及其子目录下文件的全路径 */ 27 QStringList getFilePathNameOfSplAndChildDir(QString dirPath); 28 /** 获取指定目录及其子目录下的文件夹的全路径 */ 29 QStringList getDirPathOfSplAndChildDir(QString dirPath); 30 /** 获取指定目录及其子目录下的文件与目录的全路径 */ 31 QStringList getFileAndDirPathNameOfSplAndChildDir(QString dirPath); 32 private: 33 QString dirPath; 34 }; 35 36 #endif // ALLFILESORPATHINDIR_H
AllFilesOrPathInDir.cpp
1 #include "AllFilesOrPathInDir.h" 2 3 AllFilesOrPathInDir::AllFilesOrPathInDir() 4 { 5 6 } 7 8 AllFilesOrPathInDir::AllFilesOrPathInDir(QString dirPath) 9 { 10 this->dirPath = dirPath; 11 } 12 13 void AllFilesOrPathInDir::setDirPath(QString dirPath) 14 { 15 this->dirPath = dirPath; 16 } 17 18 QStringList AllFilesOrPathInDir::getFilePathNameOfSplDir(QString dirPath, bool isShowFile) 19 { 20 QStringList filePathNames; 21 QDir splDir(dirPath); 22 QFileInfoList fileInfoListInSplDir = splDir.entryInfoList(QDir::Files); 23 QFileInfo tempFileInfo; 24 foreach (tempFileInfo, fileInfoListInSplDir) { 25 // absoluteFilePath() -- 截取到的是文件夹的路径 26 // absolutePath() -- 截取的是文件夹所在路径 27 if (isShowFile) 28 { 29 filePathNames << tempFileInfo.absoluteFilePath(); 30 } 31 else 32 { 33 filePathNames << tempFileInfo.absolutePath(); 34 } 35 } 36 return filePathNames; 37 } 38 39 QStringList AllFilesOrPathInDir::getDirPathOfSplDir(QString dirPath) 40 { 41 QStringList dirPaths; 42 QDir splDir(dirPath); 43 QFileInfoList fileInfoListInSplDir = splDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot); 44 QFileInfo tempFileInfo; 45 foreach (tempFileInfo, fileInfoListInSplDir) { 46 dirPaths << tempFileInfo.absoluteFilePath(); 47 } 48 return dirPaths; 49 } 50 51 QStringList AllFilesOrPathInDir::getFileAndDirPathNameOfSplDir(QString dirPath) 52 { 53 QStringList fileAndDirPathNames; 54 fileAndDirPathNames << getFilePathNameOfSplDir(dirPath, true); 55 fileAndDirPathNames << getDirPathOfSplDir(dirPath); 56 return fileAndDirPathNames; 57 } 58 59 int AllFilesOrPathInDir::fileConutInSplDir(QString dirPath) 60 { 61 return QDir(dirPath).entryList(QDir::Files).count(); 62 } 63 64 int AllFilesOrPathInDir::dirCountInSplDir(QString dirPath) 65 { 66 return QDir(dirPath).entryList(QDir::Dirs | QDir::NoDotAndDotDot).count(); 67 } 68 69 QStringList AllFilesOrPathInDir::getFilePathNameOfSplAndChildDir(QString dirPath) 70 { 71 QStringList filePathNames; 72 // 首先,得到这个目录下面的文件全部 73 filePathNames << getFilePathNameOfSplDir(dirPath, true); 74 75 QStringList childDirs; 76 childDirs << getDirPathOfSplDir(dirPath); 77 78 QString tempChildDir; 79 foreach (tempChildDir, childDirs) { 80 // 取其子文件夹内容 81 filePathNames << getFilePathNameOfSplAndChildDir(tempChildDir); 82 } 83 return filePathNames; 84 } 85 86 QStringList AllFilesOrPathInDir::getDirPathOfSplAndChildDir(QString dirPath) 87 { 88 QStringList dirPathNames; 89 dirPathNames << getDirPathOfSplDir(dirPath); 90 91 QString tempChildDir; 92 foreach (tempChildDir, dirPathNames) { 93 dirPathNames << getDirPathOfSplAndChildDir(tempChildDir); 94 } 95 return dirPathNames; 96 } 97 98 QStringList AllFilesOrPathInDir::getFileAndDirPathNameOfSplAndChildDir(QString dirPath) 99 { 100 QStringList fileAndDirPathNames; 101 fileAndDirPathNames << getFilePathNameOfSplDir(dirPath, true); 102 103 QStringList childDirs; 104 childDirs << getDirPathOfSplDir(dirPath); 105 106 QString tempChildDir; 107 foreach (tempChildDir, childDirs) { 108 fileAndDirPathNames << tempChildDir; 109 // 取其子文件夹内容 110 fileAndDirPathNames << getFileAndDirPathNameOfSplAndChildDir(tempChildDir); 111 } 112 return fileAndDirPathNames; 113 }