QT只保留一个月内的测试数据

    项目中需要保存数据,但为了节省磁盘空间,我们往往只保存一段时间内的数据,这段时间以外的数据,我们就要在软件中自动给删除掉,也有另一种方式就是监控磁盘容量,当磁盘剩余容量低到一定值后便自动删除保存的数据。但是这里我们来看看如何只保留一个月内的数据。

    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;
}

代码验证是可行的,我是在构造函数中调用,即每次启动软件时,先把非当月的数据删除,代码也可根据实际情况做相应修改。

猜你喜欢

转载自blog.csdn.net/lms1008611/article/details/81489539