QT遍历日志文件夹删除旧日志夹和文件(保留n个文件夹)

**

更新时间:2020-06-19

**

之前通过c++写了一个保留日志的文件。
那时候是利用获取文件夹的创建时间进行前后日期判断的。
这种就避免了文件夹名字的不同。也可以保留几天的日志文件。

现在我用的QT写的,因为是日志,我的日志文件夹采用日期每天生成一个。以日期命名(偷个懒)

统一放在logs下,里面有很多个日期文件,日志文件放在每个日期文件下。
思路:
1.获取日志文件里有几个文件夹
2.数量超过n个(天)。
3.获取文件夹名字转成int型,并进行排序。
4.把当前几个文件夹-你要保留的日期(n天)再遍历
5.获得应该要删除的文件夹名。然后进行删除。

建议采用定时器,到一个时间就执行这个函数。
至此就完成了日志文件的更新保留功能。

所需头文件:
#include < QDir>
#include < QList>
#include < QDateTime>

下面是代码:

void Typechange::mkdirdatefile()
{
    QDir dir;
    if(!dir.exists("logs")){
        dir.mkdir("logs");
        qDebug()<<"not logs file";
    }else{
        qDebug()<<"have logs file";
    }
    QString curdate=getdate();
    QDir datedir;
    if(!datedir.exists("logs/"+curdate)){
        datedir.mkdir("logs/"+curdate);
        qDebug()<<"create datelogs file";
    }
}

bool Typechange::DeleteFileOrFolder(const QString &strPath)
{
    if (strPath.isEmpty() || !QDir().exists(strPath))//是否传入了空的路径||路径是否存在
        return false;

    QFileInfo FileInfo(strPath);

    if (FileInfo.isFile())//如果是文件
        QFile::remove(strPath);
    else if (FileInfo.isDir())//如果是文件夹
    {
        QDir qDir(strPath);
        qDir.removeRecursively();
    }
    return true;
}

QStringList Typechange::GetDirNameList(const QString &strDirpath)
{
    QDir dir(strDirpath);
    QFileInfoList Info_list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
    QListIterator<QFileInfo> Iterator(Info_list);
    QStringList strDirNameList;
    QFileInfo Info;
    while (Iterator.hasNext())
    {
        Info = Iterator.next();
        if (Info.isDir())
        {
            strDirNameList << QDir(Info.absoluteFilePath()).dirName();
//            qDebug()<
        }
    }
    return strDirNameList;
}

void Typechange::delexpiredfile(const QString &strDirpath)
{
    QStringList foldername=GetDirNameList(strDirpath);
    if(foldername.size() > 7)
    {
        QList<int> intfn;
        for(int i = 0; i< foldername.size();++i)
        {
            intfn.append(foldername.at(i).toInt());
        }
        //小到大排序
        qSort(intfn.begin(),intfn.end());
        for(int j = 0; j< intfn.size()-7;++j)
        {
            QString dd=QString::number(intfn.at(j));
            qDebug()<<"delete file"<<dd<<DeleteFileOrFolder(strDirpath+"/"+dd);
        }
    }else
    {
        qDebug()<<"dairyfile not greater than 7";
    }
}

QString Typechange::getdate()
{
    QDateTime current_date_time = QDateTime::currentDateTime();
    QString date = current_date_time.toString("yyyyMMdd");
//    QString date = current_date_time.toString("yyyy-MM-dd hh:mm::ss.zzz");
    return date;
}

QT遍历日志文件夹删除旧日志夹和文件(保留n个文件夹)_第1张图片

使用方法:
#include < QCoreApplication>//获取exe路径

	QString execurrentPath = QCoreApplication::applicationDirPath();
	delexpiredfile(execurrentPath +"/(你的日志文件夹名:我的是logs)";

~持续更新优化

你可能感兴趣的:(QT学习)