Qt 文件管理 文件夹以及子文件夹遍历,读写文件,获取所有文件的文件信息

遍历某个路径下所有文件夹,以及子文件夹

 /*
  * @brief
  * 遍历某个路径下所有文件夹,以及子文件夹,找到目标文件,写入到filedata中
  *
  * @param
  * imode 0: 只会遍历子当前件夹 (默认) 1:会遍历所有的子文件夹
  * @return bool
 */
bool findPathLoadFile(const QString &path, const QString &name, QByteArray       *filedata, const int &imode = 0);

bool Widget::findPathLoadFile(const QString &path, const QString &name, QByteArray *filedata, const int &imode)
{
    QDir dir(path);
     if(!dir.exists())
     {
         return false;
     }
     dir.setFilter(QDir::Dirs | QDir::Files);
     dir.setSorting(QDir::DirsFirst);//文件夹排在前面
     QFileInfoList list = dir.entryInfoList();
     bool bIsDir;

     for (int i = 0; i < list.size(); ++i) {
         QFileInfo fileInfo = list.at(i);
         if(fileInfo.fileName() == "." | fileInfo.fileName() == "..")
         {
             continue;
         }
         bIsDir = fileInfo.isDir();
         if(bIsDir)
         {
             ++m_nDirCount;//目录个数
             if (imode == 1) {
                 findPathLoadFile(fileInfo.filePath(), name, filedata, imode);
             } else {
                 continue;
             }

         }
         else
         {
             ++m_nFilesCount;//文件个数
//qDebug() << "fileName="<<fileInfo.fileName() << "absoluteFilePath=" << fileInfo.absoluteFilePath() <<"fileSize="<<fileInfo.size()<< "lastModified=" << fileInfo.lastModified().toString("yyyy-MM-dd hh:mm:ss");
             if (fileInfo.fileName() == name) {
                 QString fileurl = fileInfo.absoluteFilePath();
                 QFile file(fileurl);
                 if (!file.open(QIODevice::ReadOnly)) {
                     qDebug() <<"file read failed";
                     break;
                 }
                 qDebug() <<"file.size: "<<file.size();
                 QByteArray tempdate = file.readAll();
                 *filedata = tempdate;
                 qDebug() <<"ok"<<fileInfo.absoluteFilePath();
                 break;
             }
         }
     }
     return true;
}

获取当前路径下所有文件的fileInfo

 /*
  * @brief
  * 获取当前路径下所有文件的fileInfo 包括: fileName  absoluteFilePath  fileSize  写入到json数组fileInfoArry中
  *
  * @param
  * imode 0: 只会遍历子当前件夹 (默认) 1:会遍历所有的子文件夹
  * @return bool
 */
bool getPathFileInfo(const QString &path, QJsonArray *fileInfoArry, const int &imode = 0);

bool Widget::getPathFileInfo(const QString &path, QJsonArray *fileInfoArry, const int &imode)
{
    QDir dir(path);
     if(!dir.exists())
     {
         return false;
     }
     dir.setFilter(QDir::Dirs | QDir::Files);
     dir.setSorting(QDir::DirsFirst);//文件夹排在前面
     QFileInfoList list = dir.entryInfoList();
     bool bIsDir;

     for (int i = 0; i < list.size(); ++i) {
         QFileInfo fileInfo = list.at(i);
         if(fileInfo.fileName() == "." | fileInfo.fileName() == "..")
         {
             continue;
         }
         bIsDir = fileInfo.isDir();
         if(bIsDir)
         {
             ++m_nDirCount;//目录个数
             if (imode == 1) {
                 getPathFileInfo(fileInfo.filePath(), fileInfoArry, imode);
             } else {
//                 continue;
                 qDebug() << "fileName="<<fileInfo.fileName() << "absoluteFilePath=" << fileInfo.absoluteFilePath() <<"fileSize="<<fileInfo.size()<< "lastModified=" << fileInfo.lastModified().toString("yyyy-MM-dd hh:mm:ss");
                 QJsonObject fileInfoJson;
                 fileInfoJson.insert("filename", fileInfo.fileName());
                 fileInfoJson.insert("filepath", fileInfo.absoluteFilePath());
                 fileInfoJson.insert("filesize", fileInfo.size());
                 fileInfoArry->append(fileInfoJson);
             }
         }
         else
         {
             ++m_nFilesCount;//文件个数
             qDebug() << "fileName="<<fileInfo.fileName() << "absoluteFilePath=" << fileInfo.absoluteFilePath() <<"fileSize="<<fileInfo.size()<< "lastModified=" << fileInfo.lastModified().toString("yyyy-MM-dd hh:mm:ss");
             QJsonObject fileInfoJson;
             fileInfoJson.insert("filename", fileInfo.fileName());
             fileInfoJson.insert("filepath", fileInfo.absoluteFilePath());
             fileInfoJson.insert("filesize", fileInfo.size());
             fileInfoArry->append(fileInfoJson);
         }
     }
     return true;
}
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZLOZL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值