引言
与数据文件有关的应用软件一般都会有硬盘检测与文件清理的功能。
本文代码实现在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());
}
}
}
总结
硬盘空间检测和文件清理的功能实现比较像软件的日志模块,需求简单的话代码量非常少,但是要求比较高的话就不容易实现了。文章分享一个简单需求的实现,对复杂要求还是很有借鉴意义的。