Qt5.9拷贝文件(复制文件)函数封装和总结(核心函数:QFile::copy())

版权声明:本文为博主原创文章,欢迎各位朋友转载。转载时,保留链接地址! 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常用文件操作类介绍)

猜你喜欢

转载自blog.csdn.net/naibozhuan3744/article/details/81319012