Qt总结之三:磁盘文件操作、遍历文件夹和文件目录,并过滤和获取文件信息、后缀名、前缀名(三)_qt 列举 硬盘-程序员宅基地

技术标签: 【-------Qt------】  Qt  磁盘容量  文件操作  

前言

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

话不多说,先上效果图

共分为两个部分,第一部分是检测磁盘容量,第二部分是筛选磁盘内指定文件(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 : GB
	dTotalBytes = lTotalBytesTemp.QuadPart / 1024.0 / 1024 / 1024;
	dFreeBytes = lTotalFreeBytes.QuadPart / 1024.0 / 1024 / 1024;

	ui.totalLabel->setText(QString::number(dTotalBytes, 'f', 3));//总计:xxGB
	ui.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();

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Aidam_Bo/article/details/85258347

智能推荐

Unity ShaderLab 中的内置变量_shaderlab 内置参数-程序员宅基地

文章浏览阅读1.5k次。点此获取官方文档地址所有的这些内置变量类型无需声明,直接使用,需要包含:UnityCG.cginc file.Transformationsfloat4x4 UNITYMATRIXMVP Current modelviewprojection matrixfloat4x4 UNITYMATRIXMV Current model*view matrixfloa_shaderlab 内置参数

MFC定义圆角矩形按钮_修改mfcgroupbox为圆角矩形-程序员宅基地

文章浏览阅读6.8k次。使用仅需两步!第一步:CButton替换为CBtnNoImg。第二步:设置各个状态的颜色,和字体(字体设置可选) { CFont *pFont = new CFont(); pFont->CreateFont(11, //以逻辑单位方式指定字体的高度 0, //以逻辑单位方式指定字体中字符的平均宽度 0, //指定偏离垂线和X轴在显示面上的夹角(单位:0.1_修改mfcgroupbox为圆角矩形

xml配置文件引用properties文件报错_xml文件找不到propertycommonconfigurer.class-程序员宅基地

文章浏览阅读1.6k次。一般是配置文件引用失败引起的正确的配置:<bean id="propertyConfigurer" class="com.jcl.common.spring.web.***PropertyPlaceholderConfigurer"> <property name="envPropFiles"> <lis..._xml文件找不到propertycommonconfigurer.class

Linux结构目录详解-程序员宅基地

文章浏览阅读1.1k次,点赞26次,收藏15次。Linux在Linux中,系统默认的用户是root,其实和 windows 的 administrator 类似,root 用户可以操作操作系统的任何文件和设备,所以在生产环境就不要乱用root了,权利越大,责任越大。学习Linux,就要习惯通过命令行的方式学习,。目前的Linux导图如下。

unity scrollview滚动到指定的位置_unity scrollview滚动到指定位置-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏5次。unity scrollview 滚动到指定位置,需要使用 normalizedPosition,或者 verticalNormalizedPosition,或者 horizontalNormalizedPosition_unity scrollview滚动到指定位置

人脸识别技术优势-程序员宅基地

文章浏览阅读693次。当下人们对信息安全问题格外的注重,并且信息安全也成为这个时代的热门话题。基于密码、个人识别码、磁卡和钥匙等传统的安全措施已不能完全满足社会要求,所以人们把目光投向了生物特征识别技术——利用人体固有的生理特征或行..._人脸识别技术的优点

随便推点

汇编语言的简答入门--斐波那契数列(递归)_汇编语言递归求斐波那契-程序员宅基地

文章浏览阅读9k次。TITLE Save an array and dispalyINCLUDE Irvine32.inc.dataarray DWORD 12 DUP (?) ; define a array for saving Fibonacci numbersstep = type arraynum DWORD ?count DWORD ?prompt byte "The first_汇编语言递归求斐波那契

pip命令使用详解-程序员宅基地

文章浏览阅读10w+次,点赞29次,收藏188次。pip很像CentOS系统中的yum命令,用于安装及维护Python包。pip的安装windows其实在windows下是默认安装了pip工具的,只是没有将其所在目录加入Path,导致命令查找不到。 将python安装目录下的scripts目录加入环境变量Path中即可。Linux执行下面命令即可完成安装# wget https://bootstrap.pyp..._pip

2013.9.7 CISA pass的一点感想-程序员宅基地

文章浏览阅读68次。2013.9.7 CISA pass的一点感想 先说一个本人基本情况从事信息安全和BCM工作,考试前没有参加培训机构的培训,从6月中旬开始复习CISA,复习材料就是汇哲的教材书和2本红宝书。 看到论坛上各位大牛600+通过,我的通过分数4开头,就不拿出来show了,以免丢人现眼。在此就和大家分享几点个人复习和备考的感受。1、看到论坛上有大..._cisa 初步成绩报告 not pass

SpringSecurity的使用_spring security 3.7使用-程序员宅基地

文章浏览阅读3.9k次。Spring Security 是针对Spring项目的安全框架,也是Spring Boot底层安全模块默认的技术选型,他可以实现强大的Web安全控制,对于安全控制,我们仅需要引入 spring-boot-starter-security 模块,进行少量的配置,即可实现强大的安全管理!使用步骤:1:加入依赖 <dependency> <groupId>org.springframework.boot</groupId> _spring security 3.7使用

Linux 执行定时任务 shell脚本_linux定时任务shell脚本-程序员宅基地

文章浏览阅读540次。https://www.cnblogs.com/grimm/p/8794707.html Linux上面执行定时任务,我们可以利用crontab -e直接编辑定时任务 另外我们还可以写好shell脚本,定时去执行shell脚本,这两个方法都可以起到定时执行的作用下面我详细说一下入如何执行shell脚本1.声明一下我安装的lnmp环境,shell脚本存放的位置在 /usr/local..._linux定时任务shell脚本

给WordPress的文章插入数学公式_word公式在wordpress-程序员宅基地

文章浏览阅读5k次。这里是我的个人网站: https://endlesslethe.com/insert-math-formula-into-wordpress.html 有更多总结分享,最新更新也只会发布在我的个人网站上。排版也可能会更好看一点=v= 问题背景 我使用OneNote写总结。在总结数论相关的算法时,文章会包含数学公式。数学公式是MS特有的格式。直接将OneNote复制到WordPre_word公式在wordpress

推荐文章

热门文章

相关标签