前言

本节内容主要包括磁盘容量检测、磁盘内指定或特定文件的操作

话不多说,先上效果图

共分为两个部分,第一部分是检测磁盘容量,第二部分是筛选磁盘内指定文件(test.txt)或特定文件(.txt / .png类型文件)

获取磁盘容量关键函数:【fileapi.h】 GetDiskFreeSpaceEx() 

void DiskSend::GetDiskSpace(QString strDisk, double& dTotalBytes, double& dFreeBytes)
{LPCWSTR lpcwstrDriver = (LPCWSTR)strDisk.utf16();ULARGE_INTEGER lFreeBytesAvailable, lTotalBytesTemp, lTotalFreeBytes;if (!GetDiskFreeSpaceEx(lpcwstrDriver, &lFreeBytesAvailable, &lTotalBytesTemp, &lTotalFreeBytes)){QMessageBox::warning(0, "Warning", "Acquire Disk Space Failed !");dTotalBytes = -1;dFreeBytes = -1;return;}//unit : GBdTotalBytes = lTotalBytesTemp.QuadPart / 1024.0 / 1024 / 1024;dFreeBytes = lTotalFreeBytes.QuadPart / 1024.0 / 1024 / 1024;ui.totalLabel->setText(QString::number(dTotalBytes, 'f', 3));//总计:xxGBui.freeLabel->setText(QString::number(dFreeBytes, 'f', 3));//剩余可用: xxGB
}

一、磁盘容量检测

该模块细分三个子模块

(1)通过改变QCommboBox indexcahnged信号槽,来获取对应磁盘总容量和所剩可用容量

定义QcommBox信号槽,获取磁盘String

connect(ui.comboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(slotDiskChanged(const QString&)));

(2)通过设置定时器,每隔十秒检测所有磁盘容量并展示出来

定义定时器,每隔10检测设备所有磁盘一次

connect(m_timer, SIGNAL(timeout()), this, SLOT(slotDiskChanged()));

(3)通过UDP发送该设备所有磁盘信息

QByteArray datagram;
QDataStream out(&datagram, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_5_5);
out << /*QDateTime::currentDateTime() << */dTotalBytes << dFreeBytes;
//qDebug() << QDateTime::currentDateTime();
QHostAddress address;
address.setAddress("192.168.1.67");
udpSocket->writeDatagram(datagram, address, 5555);QThread::sleep(1);

二、筛选磁盘内特定文件

  1. 遍历所有磁盘
  2. 遍历每个磁盘所有文件夹,直至文件夹没有子节点(即文件)

注:此时我们找的是指定文件(test.txt)

根据前缀fname <test> 来遍历查找 sfiles.baseName() ;

void DiskSend::findSpecialFile(QString strDir, QStringList fileName,QString fname)
{QDir curdir(strDir);curdir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);QFileInfoList curdirlist = curdir.entryInfoList();foreach(QFileInfo sfiles, curdirlist){QString sfilesname = sfiles.fileName();if (sfiles.isDir() == true){QString strFileName = sfiles.filePath();findSpecialFile(strFileName, fileName,fname);}if (sfiles.isFile() == true){        QString base = sfiles.baseName() ;if (fname.contains(base,Qt::CaseInsensitive)){sfileNamePath snew;snew.strFileName = sfiles.fileName();snew.strFilePath = sfiles.filePath();g_sfnp.append(snew);ui.lineEdit_2->setText(snew.strFilePath);}}}//return s;
}

三、筛选磁盘内指定文件

注:此时我们找的是特定文件(.txt),所有 .txt 类型文件

根据后缀fileName <*.txt> 来遍历查找 QString ext = "*." + sfiles.suffix();

void DiskSend::findSpecialFile(QString strDir, QStringList fileName,QString fname)
{QDir curdir(strDir);curdir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);QFileInfoList curdirlist = curdir.entryInfoList();foreach(QFileInfo sfiles, curdirlist){QString sfilesname = sfiles.fileName();if (sfiles.isDir() == true){QString strFileName = sfiles.filePath();findSpecialFile(strFileName, fileName,fname);}if (sfiles.isFile() == true){        QString ext = "*." + sfiles.suffix();if (fileName.contains(ext ,Qt::CaseInsensitive)){sfileNamePath snew;snew.strFileName = sfiles.fileName();snew.strFilePath = sfiles.filePath();g_sfnp.append(snew);ui.lineEdit_2->setText(snew.strFilePath);}}}//return s;
}

总结

文件路径 :fileInfo.filePath();

文件全名称:fileInfo.fileName();

文件前缀:fileInfo.baseName();

文件后缀:fileInfo.suffix();

文件是否存在:fileInfo.exists();

文件大小:fileInfo.size();

是否是文件:fileInfo.isFile();

是否是目录:fileInfo.isDir();

是否是连接符:fileinfo.isSymLink();

Qt总结之三:磁盘文件操作、遍历文件夹和文件目录,并过滤和获取文件信息、后缀名、前缀名(三)相关推荐

  1. 【QT】遍历文件夹和文件目录,并过滤和获取文件信息、后缀名、前缀名

    [QT]遍历文件夹和文件目录,并过滤和获取文件信息.后缀名.前缀名 前言: 需要在特定目录或磁盘下查找特定文件 一.筛选目录 (一)单一目录下遍历,筛选特定文件 QDir dir("./Sa ...

  2. 解放文件夹下所有层级的特定格式文件,找出文件夹内所有的txt/FLAC/MP4/MP3等等等等,并复制到另一个文件夹中

    解放文件夹下所有层级的特定格式文件,找出文件夹内所有的txt/FLAC/MP4/MP3等等等等,并复制到另一个文件夹中 引言 代码 得意 天天学习,好好向上 引言 各位朋友们好!最近遇到一些想要方便办 ...

  3. Java将指定文件/文件夹压缩成zip、rar压缩文件

    import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipOutputStream;import java.io.*; ...

  4. 实时监测文件夹且根据条件自动删除指定文件夹下文件

    一.需求说明 当我们的项目开发完成部署到生产环境使用后,为了便于后续的运维工作(对问题及时排查和解决)在项目中编写了一些关于对异常情况或者实时数据自动生成对应的日志文件等内容,但是随着时间的流逝,这些 ...

  5. python批量新建文件夹_python批量创建指定名称的文件夹

    本文实例为大家分享了python批量创建指定名称的文件夹具体代码,供大家参考,具体内容如下 继删除多余文件之后,做了一些数据处理,需要重新保存数据,但文件夹的名称又不能改 所以只能创建新的文件夹,换个 ...

  6. vue前端上传文件夹的插件_基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件...

    1. 前言 之前公司要在管理系统中做一个全局上传插件,即切换各个页面的时候,上传界面还在并且上传不会受到影响,这在vue这种spa框架面前并不是什么难题.然而后端大佬说我们要实现分片上传.秒传以及断点 ...

  7. win10电脑服务器在哪个文件夹下,Win10桌面背景在哪个文件夹?Win10桌面背景所在文件夹介绍...

    最近有Win10用户反映,之前电脑有设了张很好看的桌面背景,但后来不小心给换成了别的,现在想换回来,却不知道要在哪个文件夹找那张桌面背景,用户为此非常困恼.那么,Win10桌面背景在哪个文件夹呢?下面 ...

  8. python检测文件夹中新增文件_python检测文件夹变化,并拷贝有更新的文件到对应目录的方法...

    检测文件夹,拷贝有更新的文件到对应目录 2016.5.19 亲测可用,若有借鉴请修改下文件路径: 学习python小一个月后写的这个功能,属于初学,若有大神路过,求代码优化~ newcopy.py: ...

  9. java 文件递归删除文件夹_Java十行代码实现递归删除文件夹中所有文件

    递归删除文件夹中所有文件 要递归首先需要有方法.递归,即方法自己调用自己.一般在程序中很少使用,但在这个实现中,我们无法知道文件夹的深度,更无法根据深度来实现循环的嵌套. 递归两个重要条件: 终止边界 ...

  10. #窗体整人小程序_Excel VBA和文件夹-1.8通过对话框灵活选定文件的小技巧

    Excel VBA和文件夹-1.8通过对话框灵活选定文件的小技巧 前景提要 在之前,我们学习了如何通过对话框的形式来打开文件的方法,这种方法的好处就是两个字:灵活,我们不用在代码中强制指定必须在某个文 ...

最新文章

  1. 尘埃落定!苹果 10 亿美元入局 5G,Intel 挥别 9 年基带业务
  2. Altium designer 操作笔记
  3. appium定位WebView页面元素
  4. 选择or不选择苹果的理由
  5. 洛谷 - P2754 [CTSC1999]家园(最大流+并查集)
  6. Java比以往任何时候都摇滚
  7. python3 set_python3.x 基础三:set集合
  8. uniapp网络请求封装;小程序请求接口封装;uni.request接口封装
  9. mysql中括号_干货!Python与MySQL数据库的交互实战
  10. 博客园添加鼠标粒子吸附特效
  11. storm如何集成kafka
  12. 静默安装Oracle12.2数据库
  13. 纪录安装tensorflow的又一次的坑
  14. SpringBoot中关于Mybatis使用的三个问题
  15. 【OTT】国内主要OTT平台背后的那些CDN服务商
  16. 概率论中的一些基础知识——条件概率 先验概率 后验概率 似然 概率分布函数 概率密度函数
  17. Word——LaTeX如何在Word使用(二)
  18. JavaScript知识点整理(十六)- PC端网页特效 - 案例练习
  19. 清理localstorage_localstorage文件夹可以删除吗
  20. Qt开发奇葩问题总集

热门文章

  1. 二维平面坐标系中,判断某点是否在正六边形内 | python 实现 + 数学推导(已知正六边形六个顶点坐标)
  2. android:#FFFFFFFF 颜色码解析
  3. leetcode解题报告:Interleaving String
  4. 伺服系统 计算机仿真,减摇鳍电伺服系统的计算机仿真研究-应用科技-哈尔滨工程大学.PDF...
  5. ubuntu下安装PCL并测试(含视频安装过程记录)
  6. String通过“+”号拼接字符串的底层实现
  7. JS 父子(弹出)窗口操作总结
  8. 云南大学软件测试,软件测试大赛云南省省赛在软件学院如期举行
  9. MySQL数据类型特征_Mysql学习(三)数据类型_mysql
  10. js dojo 保存txt文件