Qt 文件拷贝带进度条显示
来源:互联网 发布:2017淘宝评价计分规则 编辑:程序博客网 时间:2024/06/05 10:37
1、拷贝中
2、拷贝结束
3、拷贝线程源码,拷贝做了过滤,只复制源文件夹下的 .jpg、.avi文件
.h
#ifndef COPYTHREAD_H
#define COPYTHREAD_H
#include <QThread>
#include <QStringList>
enum{
COPY_START=0,
COPY_STOP,
COPY_FILE_NAME,
COPY_TOTAL_RATE,
COPY_SINGLE_RATE,
COPY_ERROR_MEM_FULL
}COPY_STATION;
enum{
SUCCESS=0,
ERROR_SRC_PATH_NULL,
ERROR_DES_PATH_NULL,
ERROR_NO_FILES,
ERROR_MEM_FULL
}RETURN_VALUE;
class CopyThread : public QThread
{
Q_OBJECT
public:
CopyThread();
void run();
int copyStart();
void copyStop();
void setSrcDirPath(QString path) { srcPath=path; }
void setDesDirPath(QString path) { desPath=path; }
private:
QStringList fileList;
QString srcPath;
QString desPath;
bool bStop;
unsigned long fileTotalSize;
unsigned long curSize;
int fileCopy(QString fileName);
signals:
void copyStationSig(int flag,QString qsText);
};
#endif // COPYTHREAD_H
.cpp
#include "copythread.h"
#include <QDebug>
#include <QFileInfo>
#include <QDir>
CopyThread::CopyThread()
{
}
int CopyThread::copyStart()
{
// loading filelist
QString fileType;
QString fileName;
QDir fileDir;
QFileInfoList fileInfoList;
QFileInfo fileInfo;
int i=0;
// check path
fileInfo.setFile(srcPath);
if(!fileInfo.isDir()) return ERROR_SRC_PATH_NULL;
fileInfo.setFile(desPath);
if(!fileInfo.isDir()) return ERROR_DES_PATH_NULL;
fileList.clear();
fileTotalSize=0;
curSize=0;
fileDir.setPath(srcPath);
fileDir.setFilter(QDir::Files); // 只选择文件其他的过滤掉
fileInfoList = fileDir.entryInfoList(); // 获取文件信息列表
do{
fileInfo = fileInfoList.at(i);
fileType = fileInfo.fileName().split(".").last();
if(fileType=="jpg" || fileType=="avi") // jpg、avi
{
fileTotalSize+=fileInfo.size()/1024;
fileName=srcPath+"/"+fileInfo.fileName();
fileList<<fileName;
}
else
{
fileInfoList.removeOne(fileInfo);
continue;
}
i++;
}while(i<fileInfoList.size());
if(0==fileList.count()) return ERROR_NO_FILES;
bStop=false;
emit copyStationSig(COPY_START,NULL);
this->start();
emit copyStationSig(COPY_STOP,NULL);
return SUCCESS;
}
void CopyThread::copyStop()
{
bStop=true;
}
void CopyThread::run()
{
int i;
QString fileName;
for(i=0;i<fileList.count();++i)
{
fileName = fileList.at(i);
emit copyStationSig(COPY_FILE_NAME,fileName.split("/").last());
if(ERROR_MEM_FULL==fileCopy(fileName))
{
bStop=true;
emit copyStationSig(COPY_ERROR_MEM_FULL,NULL);
this->exit();
return;
}
if(bStop) break;
}
emit copyStationSig(COPY_STOP,fileName);
}
int CopyThread::fileCopy(QString fileName)
{
QFileInfo fileInfo;
QString desFileName;
QByteArray byteArray;
unsigned long fileSize;
QString qsStaText;
unsigned long count=0;
unsigned long freeSpace= 5*1024*1024;
desFileName=desPath + "/" + fileName.split("/").last();
fileInfo.setFile(fileName);
fileSize=fileInfo.size()/1024;
if(fileSize>freeSpace) return ERROR_MEM_FULL;
fileInfo.setFile(desFileName);
if(fileInfo.isFile()) // 存在则删除
{
qDebug()<<desFileName<<" 该文件已存在!";
QFile::remove(desFileName);
}
// 创建目标文件
QFile desFile(desFileName);
desFile.open(QIODevice::WriteOnly);
// 打开原文件
QFile srcFile(fileName);
srcFile.open(QIODevice::ReadOnly);
while(!srcFile.atEnd())
{
count++;
byteArray=srcFile.read(1024);
desFile.write(byteArray);
qsStaText = QString::number(100*count/fileSize);
emit copyStationSig(COPY_SINGLE_RATE,qsStaText);
qsStaText = QString::number(100*(curSize+count)/fileTotalSize);
emit copyStationSig(COPY_TOTAL_RATE,qsStaText);
if(bStop)
{
desFile.close();
srcFile.close();
QFile::remove(desFileName);
return SUCCESS;
}
}
desFile.close();
srcFile.close();
curSize+=fileSize;
return SUCCESS;
}
4、工程链接:http://download.csdn.net/detail/qq_18854309/9829694
0 0
- Qt 文件拷贝带进度条显示
- 带进度条的文件拷贝
- 文件拷贝时显示进度条
- 拷贝文件(能显示进度条)[原创]
- 拷贝文件(能显示进度条)[原创]
- MFC拷贝文件及进度条显示
- MFC拷贝文件及进度条显示
- 带console进度条的文件拷贝程序,C++
- 带进度条的文件夹拷贝
- 利用QT实现写文件,用进度条显示
- 带进度条文件上传
- Process进程 ; Thread线程 (拷贝文件,带进度条的使用实例)
- QT批拷贝文件
- 上传文件带真实的进度条(支持多文件上传)--进度条是在文件上传完成后再显示
- 文件下载显示进度条
- 文件上传进度条显示
- 大文件带进度条上传
- Android带进度条文件上传
- 详解SpringMVC请求的时候是如何找到正确的Controller
- BZOJ2186]沙拉公主的困惑(求1-N!中与M!互质的数的个数)
- HDOJ 2003 求绝对值
- 科猫首页html编写
- CentOS 7 安装 MySQL 5.7
- Qt 文件拷贝带进度条显示
- B1012. 数字分类 (20')
- 【软考】计算机病毒与木马
- 指针与数组
- 详解SpringMVC中Controller的方法中参数的工作原理
- PAT1006. 换个格式输出整数 (15)
- PAT 乙等 1002 C语言
- 51Nod 1287 加农炮 ( 暴力/线段树
- 可视化展示神经网络是如何将分类正确率提升的