1,简介
UDiskCopy :U盘批量复制工具
开发背景:
公司出货时软件安装包及其他电子档文件,是采用定制的小容量U盘存储的,
之前是生产人员一个一个手动拷贝到各个U盘,现在量增大,一次要出几十上百个备用,
于是买了USB HUB,搭配该工具用于批量复制,提高制作效率。
2,界面截图
3,主要代码
MainWindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
void timerEvent(QTimerEvent *event);
private slots:
void on_btnBrowse_clicked();
void on_btnCopy_clicked();
private:
void RefreshList();
QStringList GetRemovableDisks();
private:
Ui::MainWindow *ui;
int mTimer;
};
#endif // MAINWINDOW_H
MainWindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QStandardPaths>
#include <QDebug>
#include "Windows.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//如果桌面存在指定名称的文件夹,直接自动帮填上。
//平常就把最新安装包放在该文件夹,那么启动软件只需要直接点"复制"就行
QString dir = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation) + QStringLiteral("/上位机软件");
if(QFile::exists(dir))
{
ui->lineEdit->setText(dir);
}
RefreshList();
mTimer = startTimer(1000);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::timerEvent(QTimerEvent *event)
{
if(mTimer = event->timerId())
{
//每秒刷新一次可移动磁盘列表
RefreshList();
}
}
void MainWindow::on_btnBrowse_clicked()
{
//选择要被复制的文件夹
QString dirDesk = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
QString dir = QFileDialog::getExistingDirectory(this, QStringLiteral("选择文件夹"), dirDesk);
if (QFile::exists(dir))
{
ui->lineEdit->setText(dir);
}
}
void MainWindow::on_btnCopy_clicked()
{
QString dir = ui->lineEdit->text();
if(!QFile::exists(dir))
{
return;
}
QStringList disks = GetRemovableDisks();
foreach (QString disk, disks)
{
//复制文件夹内文件(不递归)
QDir qdir(dir);
foreach(QString name, qdir.entryList(QDir::AllEntries))
{
QString path = dir + "/" + name;
QFileInfo fi(path);
if(fi.isFile())
{
QFile::copy(path, disk + "/" + name);
}
}
}
}
void MainWindow::RefreshList()
{
//刷新可移动磁盘列表
ui->listWidget->clear();
ui->listWidget->addItems(GetRemovableDisks());
}
QStringList MainWindow::GetRemovableDisks()
{
//枚举可移动磁盘
QStringList disks;
char szDriver[3];
for (int i = 'C'; i <= 'Z'; i++)
{
szDriver[0] = i;
szDriver[1] = ':';
szDriver[2] = 0;
UINT uType = GetDriveTypeA(szDriver);
if (uType == DRIVE_REMOVABLE)
{
//qDebug()<< "find" << (char)i;
disks.append(QString("%1:").arg((char)i));
}
}
return disks;
}
4,源码下载
配套源码,在群文件免费下载:
群号码:1149411109
群名称:Qt实战派学习群