QT 获取指定文件夹下所有文件的最后修改时间

在开发过程中,通常会输出一些日志,以便记录软件的运行状况。但是久而久之,如果日志文件没有删除的话,就会越积越多,导致用户的磁盘空间不断缩小。所以,我们一般会定期清除超过一定天数的日志文件。

<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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellokandy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值