Qt实现Linux下的硬盘空间监测和文件清理

引言

与数据文件有关的应用软件一般都会有硬盘检测与文件清理的功能。
本文代码实现在Linux系统下使用Qt编写的硬盘监测与文件清理模块。

代码之路

当内存占比大于85%时,会进行文件的删除,保留最新的半年来的文件。
内存监测部分的实现,是定期执行Linux的shell命令(df -k);
文件删除比较简单,使用QDir::entryInfoList函数与QFileInfo函数的配合。
废话不说,直接上代码。
硬盘空间监测函数:

bool SysResource::get_disk_space()
{
	QProcess process;
	process.start("df -k");
	process.waitForFinished();
	process.readLine();
	while(!process.atEnd())
	{
		QString str = process.readLine();
		if (str.startsWith("/dev/root"))
		{
			str.replace("\n", "");
			str = str.simplified();
			auto lst = str.split(" ");
			if (lst.size() > 5)
			{
				QString tmpPercent = lst[4].toString();
				QString PercentStr = tmpPercent.left(tmpPercent.size() - 1);
				int PercentInt = QString::number(PercentStr);
				if (PercentInt > 85)
				{
					qDebug() << "Memery used percent is:" << tmpPercent <<", start Delete files";
					return false;
				}
			}
		}
	}
	return true;
}

文件清理函数,是一个定时器的槽函数:

void SysResource::OnDataRemove()
{
	if (get_disk_space())
	{
		return;
	}
	QDir dir("xxx");
	dir.setFilter(QDir::Files|QDir::NoSymLinks|QDir::NoDotAndDotDot);
	dir.setSorting(QDir::Time);
	QFileInfoList fileList = dir.entryInfoList();
	int fileNum = fileList.size();
	if (fileList.size() > 180) //180天--1天一个文件
	{
		for (int i = 180; i < fileNum; i++)
		{
			QFileInfo fileInfo = fileList.at(i);
			fileInfo.dir().remove(fileInfo.fileName());
		}
	}	
}

总结

硬盘空间检测和文件清理的功能实现比较像软件的日志模块,需求简单的话代码量非常少,但是要求比较高的话就不容易实现了。文章分享一个简单需求的实现,对复杂要求还是很有借鉴意义的。

发布了47 篇原创文章 · 获赞 45 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/lusanshui/article/details/88736761