qt c++删除文件夹下旧的文件或文件夹

Posted 若水微韧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt c++删除文件夹下旧的文件或文件夹相关的知识,希望对你有一定的参考价值。

根据读取到的指定文件夹路径进行对文件夹按照时间排序删除比较旧的文件夹,并按照设定的最大文件夹数量执行删除操作

#ifndef FILE_MANAGER_H
#define FILE_MANAGER_H

#include <QObject>
#include <QList>
#include <QFileInfo>

#include "common_ext_global.h"

/*
* 文件夹处理,指定路径下的旧的文件夹删除操作
*/

class COMMON_EXT_EXPORT FileManager : public QObject

	Q_OBJECT
public:
	static bool deleteFileOrFolder(const QString& strPath);
	static QList<QFileInfo> getDirNameList(const QString& strDirpath);
	/*
	* 删除旧的文件夹 
	* @文件夹路径
	* @保留最大旧的文件数量
	*/
	static void removeOldFolders(const QString& strDirpath, int num_old_file_save = 3);
;


#endif


#include "filemanager.h"

#include <QDir>
#include <QList>
#include <QDateTime>
#include <QDirIterator>


bool FileManager::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;


QList<QFileInfo> FileManager::getDirNameList(const QString& strDirpath)

	QDir dir(strDirpath);
	QFileInfoList Info_list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
	QListIterator<QFileInfo> Iterator(Info_list);
	QList<QFileInfo> strDirNameList;
	QFileInfo Info;
	while (Iterator.hasNext())
	
		Info = Iterator.next();
		if (Info.isDir())
		
			strDirNameList << Info;
			//            qDebug()<<QDir(Info.absoluteFilePath()).dirName();
		
	
	return strDirNameList;


void FileManager::removeOldFolders(const QString& strDirpath, int num_old_file_save)

	QList<QFileInfo> foldername = getDirNameList(strDirpath);
	if (foldername.size() > num_old_file_save)
	
		QList<QDateTime> fileTime;
		for (int i = 0; i < foldername.size(); i++) 
			fileTime.append(foldername.at(i).lastModified());
		

		qSort(fileTime.begin(), fileTime.end());

		
		for (int i = 0; i < (fileTime.size() - num_old_file_save); i++)
		
			for (int j = 0; j < fileTime.size(); j++)
			
				if (foldername.at(j).lastModified() == fileTime.at(i))
					deleteFileOrFolder(foldername.at(j).absoluteFilePath());
			
		
	


以上是关于qt c++删除文件夹下旧的文件或文件夹的主要内容,如果未能解决你的问题,请参考以下文章

qt c++删除文件夹下旧的文件或文件夹

qt c++删除文件夹下旧的文件或文件夹

如何使用 Qt Creator 将 C++ 头文件添加到 Qt 项目

尝试打开并读取 .txt 文件,但它从原始文件中删除了实际文本(Qt GUI C++

在 C++ 或 Qt 中格式化 XML 文件

Qt Creator 将文件添加到 C++ 项目问题