#ifndef CMYDIR_H
#define CMYDIR_H
#include <QObject>
class CMyDir : public QObject
{
Q_OBJECT
public:
CMyDir();
~CMyDir();
public:
//删除文件夹
static bool deleteCate(QString strDirPath);
//备份文件夹 strDestPath:备份路径 strSrcPath:文件路径
static void BackupCate(QString strDestPath,QString strSrcPath);
//获取文件夹大小(G)
static float CateSize(QString strDirPath);
//整理文件夹(小于fSizeStd直接删除)
static void ArrangeCate(QString strDirPath,float fSizeStd);
//获取文件个数
static int GetFileNum(QString strDirPath);
private:
};
#endif // CMYDIR_H
#include "CMyDir.h"
#include <QDir>
#include <QFileInfoList>
#include <QFileDialog>
#include <QMessageBox>
CMyDir::CMyDir()
: QObject()
{
}
CMyDir::~CMyDir()
{
}
//删除文件夹
bool CMyDir::deleteCate(QString strDirPath)
{
QDir dir(strDirPath);
QFileInfoList fileList = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot);
//删除文件夹内的文件
for (int i=0;i<fileList.size();++i)
{
QFileInfo fileInfo = fileList.at(i);
if (!dir.remove(fileInfo.absoluteFilePath()))
{
QMessageBox::information(NULL,tr("Information"),tr("Deleting [%1] fail!").arg(fileInfo.completeBaseName()));
return false;
}
}
QFileInfoList dirList = dir.entryInfoList(QDir::AllDirs | QDir::Hidden | QDir::NoDotAndDotDot);
//递归调用删除文件夹内的文件
for (int i=0;i<dirList.size();++i)
{
deleteCate(dirList.at(i).absoluteFilePath());
}
//删除该文件夹
if (!dir.rmdir(strDirPath))
{
QMessageBox::information(NULL,tr("Information"),tr("Deleting [%1] fail!").arg(strDirPath.section('/',-1)));
return false;
}
return true;
}
//备份文件夹
void CMyDir::BackupCate(QString strDestPath,QString strSrcPath)
{
QDir dir;
if (!dir.exists(strDestPath))
dir.mkpath(strDestPath);
dir.setPath(strSrcPath);
QFileInfoList fileList = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot);
//复制文件夹内的文件
for (int i=0;i<fileList.size();++i)
{
QFileInfo fileInfo = fileList.at(i);
if (!QFile::copy(fileInfo.absoluteFilePath(),strDestPath+"\\"+fileInfo.completeBaseName()+"."+fileInfo.completeSuffix()))
{
QMessageBox::information(NULL,tr("Information"),tr("Copying [%1] fail!").arg(fileInfo.completeBaseName()));
return;
}
}
QFileInfoList dirList = dir.entryInfoList(QDir::AllDirs | QDir::Hidden | QDir::NoDotAndDotDot);
for (int i=0;i<dirList.size();++i)
{
QString strDeepDestPath = strDestPath + "/" + dirList.at(i).completeBaseName();
QString strDeepSrcPath = strSrcPath + "/" + dirList.at(i).completeBaseName();
BackupCate(strDeepDestPath,strDeepSrcPath);
}
}
//获取文件夹大小(G)
float CMyDir::CateSize(QString strDirPath)
{
float fSize = 0;
QDir dir(strDirPath);
foreach(QFileInfo fileInfo,dir.entryInfoList(QDir::Files))
fSize+=fileInfo.size();
foreach(QString subDir,dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot))
fSize+=CateSize(strDirPath+QDir::separator()+subDir)*1024*1024*1024;
fSize = fSize/(1024*1024*1024);
return fSize;
}
//获取文件个数(G)
int CMyDir::GetFileNum(QString strDirPath)
{
int iSize = 0;
QDir dir(strDirPath);
foreach(QFileInfo fileInfo,dir.entryInfoList(QDir::Files))
iSize++;
foreach(QString subDir,dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot))
iSize+=GetFileNum(strDirPath+QDir::separator()+subDir);
return iSize;
}
//整理文件夹
void CMyDir::ArrangeCate(QString strDirPath,float fSizeStd)
{
float fSize = CateSize(strDirPath);
if (fSize>fSizeStd)
{
QDir dir(strDirPath);
dir.setSorting(QDir::Time|QDir::Reversed );
QFileInfoList fileList = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
//QString str;
//foreach(QFileInfo fileInfo,fileList)
// str = fileInfo.completeBaseName();
if(!deleteCate(strDirPath+QDir::separator()+ fileList.at(0).completeBaseName()))
return;
ArrangeCate(strDirPath,fSizeStd);
}
}
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->pathlineEdit->setText("E:\\testFile");
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_delect_btn_clicked()
{
QString FilePath = ui->pathlineEdit->text();
CMyDir::deleteCate(FilePath);
}
void MainWindow::on_backup_btn_clicked()
{
QString FilePath = ui->pathlineEdit->text();
CMyDir::BackupCate("E:\\testFile_BackUp",FilePath);
}
void MainWindow::on_getSize_btn_clicked()
{
QString FilePath = ui->pathlineEdit->text();
float size = CMyDir::CateSize(FilePath);
}
void MainWindow::on_getCount_btn_clicked()
{
QString FilePath = ui->pathlineEdit->text();
int count = CMyDir::GetFileNum(FilePath);
}
void MainWindow::on_arrange_btn_clicked()
{
QString FilePath = ui->pathlineEdit->text();
// CMyDir::ArrangeCate(FilePath);
}
联系客服