#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QSettings>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
readInit(configpath, "filepath", filepath);
readInit(configpath, "savepath", savepath);
readInit(configpath,"eachname",eachname);
ui->lineEdit_sel->setText(filepath);
ui->lineEdit_save->setText(savepath);
ui->lineEdit_rename->setText(eachname);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_sel_clicked()
{
filepath=QFileDialog::getOpenFileName(this,"选择文件","../txtCut/","All file(*.*);;txt file(*.txt)");
ui->lineEdit_sel->setText(filepath);
if(filepath==NULL) return; //或者filepath.isEmpty()
QFileInfo info(filepath);
filename=info.fileName().section('.',0,0);//获取文件名
ui->lineEdit_rename->setText(filename+'_');
filesize=info.size();
ui->label_filesize->setText(QString("%1 B").arg(filesize));
eachsize=filesize/num;
ui->label_eachsize->setText(QString("%1 B").arg(eachsize));
savepath=info.absolutePath();
ui->lineEdit_save->setText(savepath);
getstdsize();
ui->label_stdsize->setText(QString("%1 B").arg(stdsize));
}
void MainWindow::on_pushButton_save_clicked()
{
savepath=QFileDialog::getExistingDirectory(this,"选择文件夹","../txtCut/",QFileDialog::ShowDirsOnly);
ui->lineEdit_save->setText(savepath);
}
void MainWindow::on_spinBox_valueChanged(int arg1)
{
if(mode==3) return;
if(filesize==0) return;
num=arg1;
eachsize=filesize/num;
ui->label_eachsize->setText(QString("%1 B").arg(eachsize));
getstdsize();
ui->label_stdsize->setText(QString("%1 B").arg(stdsize));
}
void MainWindow::on_pushButton_start_clicked()
{
if(filepath==NULL) return;
modeInit();
if(cutsize==0) return;
config();
QFile file(filepath);
QFile data[num];
qint64 buffsize=buffersize();
if(file.open(QIODevice::ReadOnly|QIODevice::Truncate))
{
QByteArray array;
qint64 len=0;
for(int i=0;i<num;++i)
{
data[i].setFileName(savepath+QString("/%1%2.txt").arg(eachname).arg(i));
data[i].open(QIODevice::WriteOnly|QIODevice::Truncate);
while(file.atEnd()==false)
{
array=file.read(buffsize);
len+=data[i].write(array);
//qDebug()<<len;
if(len>=cutsize*(i+1)){
data[i].close();
break;
}
}
data[i].close();
if(file.atEnd()) break;
}
}
else {return;}
file.close();
QMessageBox::information(this,"","完成");
}
void MainWindow::getstdsize() //获取最接近eachsize的2的幂次方
{
qint64 i=1;
qint64 num=eachsize;
while(num>>1){
i=i<<1;
num=num>>1;
}
stdsize=i<<1;
}
qint64 MainWindow::buffersize()
{
if(eachsize>1024)//K
{
eachsize/=1024;
if(eachsize>1024)//M
{
eachsize/=1024;
if(eachsize>1024)//G
{
return 1024*16;
}
return 1024*16;
}
return 1024;
}
return 64;
}
void MainWindow::on_lineEdit_rename_textChanged(const QString &arg1)
{
eachname=arg1;
}
void MainWindow::on_radioButton_eachsize_clicked()
{
mode=2;
}
void MainWindow::on_radioButton_stdsize_clicked()
{
mode=1;
}
void MainWindow::on_radioButton_clicked()
{
mode=3;
}
void MainWindow::on_lineEdit_fixedsize_textEdited(const QString &arg1)
{
fixedsize=arg1.toInt();
if(filesize==0) return;
if(fixedsize<=0){
ui->label_fixedsize->setText("输入份数太小!");
return;}
num=ceil(double(filesize)/double(fixedsize));
ui->label_fixedsize->setText(QString("%1").arg(num));
}
void MainWindow::modeInit()
{
switch (mode) {
case 1:
cutsize=stdsize;
break;
case 2:
cutsize=eachsize;
break;
case 3:
cutsize=fixedsize;
break;
default:
break;
}
}
void MainWindow::config()
{
writeInit(configpath,"filepath",filepath);
writeInit(configpath,"savepath",savepath);
writeInit(configpath,"eachname",eachname);
}
bool MainWindow::writeInit(QString path, QString user_key, QString user_value)
{
if(path.isEmpty() || user_key.isEmpty())
{
return false;
}
else
{
QSettings *config = new QSettings(path, QSettings::IniFormat,this);
config->beginGroup("config");
config->setValue(user_key, user_value);
config->endGroup();
return true;
}
}
bool MainWindow::readInit(QString path, QString user_key, QString &user_value)
{
user_value = QString("");
if(path.isEmpty() || user_key.isEmpty())
{
return false;
}
else
{
QSettings *config = new QSettings(path, QSettings::IniFormat,this);
user_value = config->value(QString("config/") + user_key).toString();
return true;
}
}
评论0
最新资源