版权声明:本文为博主原创文章,欢迎各位朋友转载。转载时,保留链接地址! https://blog.csdn.net/naibozhuan3744/article/details/81319012
本文主要总结用Qt5.9封装一个函数,该函数的功能是拷贝源目录下的文件到指定目录下,具体的定义如下所示:
void copyFiltTo(QString sourcePath,QString destPath, QStringList fileType);
其中,sourcePath表示源目录地址;destPath表示目的目录地址;fileType表示要复制的文件类型,比如*.png。
下是主要代码:
void Widget::copyFiltTo(QString sourcePath, QString destPath, QStringList fileType)
{
qDebug()<<tr("移动文件");
/*逻辑处理*/
QString pathsDir = sourcePath;
QStringList strList = getDirFilesName(pathsDir,fileType);
QString sourceDir=sourcePath;
QString destDir=destPath;
for(int i=0;i<strList.count();i++)
{
if(QFile::copy(sourceDir+strList.at(i),destDir+strList.at(i)))
{
qDebug()<<tr("拷贝文件%1成功!").arg(strList.at(i));
}
else
{
qDebug()<<tr("拷贝文件失败!").arg(strList.at(i));
}
}
}
QStringList Widget::getDirFilesName(QString pathsDir,QStringList filters)
{
/*获取文件夹下的文件名称*/
QDir dir(pathsDir);
if (!dir.exists())
{
return QStringList("");
}
dir.setFilter(QDir::Files | QDir::NoSymLinks);
dir.setNameFilters(filters);
QStringList allImageNameList = dir.entryList();
if (allImageNameList.count() <= 0)
{
return QStringList("");
}
return allImageNameList;
}
下面将展示一个调用该函数的实例。
1.1新建一个widget工程,不要勾选ui界面。然后分别在widget.h,widget.cpp,main.cpp分别添加如下代码。
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QVBoxLayout>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
void createView();
QStringList getDirFilesName(QString pathsDir, QStringList filters);
void copyFiltTo(QString sourcePath,QString destPath, QStringList fileType);
private slots:
void moveFilesDirBtnSlot();
private:
QVBoxLayout *mainLayout;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include <QPushButton>
#include <QDebug>
#include <QFile>
#include <QDir>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
createView();
}
Widget::~Widget()
{
}
void Widget::createView()
{
/*UI界面*/
mainLayout = new QVBoxLayout(this);
QPushButton *moveFilesDirBtn = new QPushButton("移动文件");
mainLayout->addWidget(moveFilesDirBtn);
mainLayout->addStretch();
connect(moveFilesDirBtn,SIGNAL(clicked(bool)),this,SLOT(moveFilesDirBtnSlot()));
}
QStringList Widget::getDirFilesName(QString pathsDir,QStringList filters)
{
/*获取文件夹下的文件名称*/
QDir dir(pathsDir);
if (!dir.exists())
{
return QStringList("");
}
dir.setFilter(QDir::Files | QDir::NoSymLinks);
dir.setNameFilters(filters);
QStringList allImageNameList = dir.entryList();
if (allImageNameList.count() <= 0)
{
return QStringList("");
}
return allImageNameList;
}
void Widget::copyFiltTo(QString sourcePath, QString destPath, QStringList fileType)
{
qDebug()<<tr("移动文件");
/*逻辑处理*/
QString pathsDir = sourcePath;
QStringList strList = getDirFilesName(pathsDir,fileType);
QString sourceDir=sourcePath;
QString destDir=destPath;
for(int i=0;i<strList.count();i++)
{
if(QFile::copy(sourceDir+strList.at(i),destDir+strList.at(i)))
{
qDebug()<<tr("拷贝文件%1成功!").arg(strList.at(i));
}
else
{
qDebug()<<tr("拷贝文件失败!").arg(strList.at(i));
}
}
}
void Widget::moveFilesDirBtnSlot()
{
qDebug()<<tr("移动文件");
/*逻辑处理*/
QString sourceDir="D:/userdataImage/RecoveredData/.4/";
QString destDir="D:/userdataImage/RecoveredData/pic/";
QStringList filters;
filters<<"*.jpg";
copyFiltTo(sourceDir,destDir,filters);
}
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.resize(960,640);
w.show();
return a.exec();
}
1.2程序构建和运行后,结果如下所示:
参考内容:
https://blog.csdn.net/naibozhuan3744/article/details/81071057(获取目录下所有文件名称)
https://blog.csdn.net/ymc0329/article/details/7975654/(拷贝文件)
https://blog.csdn.net/mao19931004/article/details/51501200(Qt常用文件操作类介绍)