在开发过程中,通常会输出一些日志,以便记录软件的运行状况。但是久而久之,如果日志文件没有删除的话,就会越积越多,导致用户的磁盘空间不断缩小。所以,我们一般会定期清除超过一定天数的日志文件。
<1> 递归遍历文件夹下所有文件
#include <QtCore/QCoreApplication>
#include <QDir>
#include <QFileInfoList>
#include <QDateTime>
#include <QDebug>
//获取指定文件夹下所有超过阈值天数的文件
QStringList GetExpiredFiles(QString folderPath, int days = 7)
{
qDebug() << "folderPath=" << folderPath;
QStringList files = {};
QDir dir(folderPath);
dir.setFilter(QDir::NoDotAndDotDot | QDir::Hidden | QDir::NoSymLinks | QDir::Dirs | QDir::Files);
dir.setSorting(QDir::Time);//按最迟修改时间排序
QFileInfoList fileList = dir.entryInfoList();
int count = fileList.count();
qDebug() << "fileList.count()=" << count;
foreach(QFileInfo item, fileList)
{
QString absFilePath = item.absoluteFilePath();
QFileInfo fileInf(absFilePath);
if (fileInf.isDir())
{
qDebug() << "isDir, absoluteFilePath=" << absFilePath;
GetExpiredFiles(absFilePath);
}
else
{
QDateTime dt = item.lastModified();
qDebug() << "file="
<< absFilePath
<< ",lastModified="
<< dt.toLocalTime().toString("yyyy:MM:dd hh:mm:ss");
//文件的上次修改时间已超过7天
if (dt.addDays(days).toTime_t() < QDateTime::currentDateTime().toTime_t())
{
files.append(absFilePath);
}
}
}
return files;
}
//
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//程序运行目录
QString dirpath = QCoreApplication::applicationDirPath();
//
QStringList files = GetExpiredFiles(dirpath);
qDebug() << "------- more than 7 days, files number=" << files.count();
foreach(auto v, files)
{
qDebug() << v;
}
return a.exec();
}
<2> 根据文件后缀名进行过滤(推荐)
#include <QtCore/QCoreApplication>
#include <QDirIterator>
#include <QDateTime>
#include <QDebug>
QStringList FindExpiredFiles(QString path, QStringList filters, int days = 7)
{
//定义迭代器并设置过滤器
QDirIterator dirIter(path,
filters,
QDir::Files | QDir::NoSymLinks,
QDirIterator::Subdirectories);
QStringList fileList;
while (dirIter.hasNext())
{
dirIter.next();
QFileInfo fileInfo = dirIter.fileInfo();
QString absFilePath = fileInfo.absoluteFilePath();
QDateTime dt = fileInfo.lastModified();
qDebug().noquote().nospace() << absFilePath
<< ", last modified time="
<< dt.toLocalTime().toString("yyyy:MM:dd hh:mm:ss");
//文件的上次修改时间已超过7天
if (dt.addDays(days).toTime_t() < QDateTime::currentDateTime().toTime_t())
{
fileList.append(absFilePath);
}
}
return fileList;
}
//
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//程序运行目录
QString dirpath = QCoreApplication::applicationDirPath();
QStringList filters;
filters << QString("*.txt") << QString("*.log");
QStringList filelst = FindExpiredFiles(dirpath, filters);
qDebug() << "filelst.count()=" << filelst.count();
foreach(auto v, filelst)
{
qDebug() << v;
}
return a.exec();
}