项目中需要保存数据,但为了节省磁盘空间,我们往往只保存一段时间内的数据,这段时间以外的数据,我们就要在软件中自动给删除掉,也有另一种方式就是监控磁盘容量,当磁盘剩余容量低到一定值后便自动删除保存的数据。但是这里我们来看看如何只保留一个月内的数据。
QT中实现这个功能还是比较简单,可以提取保存的测试文件的创建时间,也可以在保存时按日期命名,然后判断时间月份是不是跟当前月份一致,不是一致便删除即可(这里所说的保留一个月内的数据,是指保留整个月份的数据,比方保留8月份的,那7月及7月份之前的数据全部删掉),下边就来看看代码:
这里要保留的数据有图片和测试数据,改功能也是从最近的一个项目中提取出来的
测试图片保存在exe执行文件目录的temp文件夹下,temp文件夹内部以当天的日期命名一个文件夹,当天的测试图片便保存在里边,如下,现在是8月份,那么我们保留的就只有20180807这个文件夹,其余两个文件夹及里边的图片,就需要删掉
测试数据保存在TestData文件夹中,命名也是以建立日期命名
现在来看下代码:
bool AutoRemoveTestMsg() //测试数据及图片只保留当月的
{
//删除保留的非当月的图片
QDir infoDir(QApplication::applicationDirPath() + "/temp");
infoDir.setFilter(QDir::Dirs);
QFileInfoList list = infoDir.entryInfoList();
foreach(QFileInfo info, list)
{
QString name = info.fileName();
if ("." == name || ".." == name)
{
continue;
}
QString createTime = info.baseName().left(6); //获取文件夹名前6位(即年月)
if (createTime != QDateTime::currentDateTime().toString("yyyyMM")) //非当月的便删除文件夹及其里边的图片
{
QDir dir(info.absoluteFilePath());
dir.setFilter(QDir::Files);
QFileInfoList list1 = dir.entryInfoList(); //遍历文件夹内的图片,此处只有图片,所以不需要递归删除
foreach (QFileInfo info1, list1)
{
QFile::remove(info1.absoluteFilePath()); //一个个删除文件夹内的图片
}
dir.rmdir(info.absoluteFilePath()); //图片删除完毕后把文件夹也删除
}
}
//删除测试数据非当月的测试数据
QDir testDate(QApplication::applicationDirPath() + "/TestData");
infoDir.setFilter(QDir::Files);
QFileInfoList listData = testDate.entryInfoList();
foreach (QFileInfo info, listData)
{
//通过对比文件名的前6位(及年月)与当前日期的年月,确定是否删除
//也可以通过获取创建日期来判断是否删除
if (info.baseName().left(6) != QDateTime::currentDateTime().toString("yyyyMM"))
{
QFile::remove(info.absoluteFilePath());
}
}
return true;
}
代码验证是可行的,我是在构造函数中调用,即每次启动软件时,先把非当月的数据删除,代码也可根据实际情况做相应修改。