QTime time;
time.start();
int size = 4096;
QFile file(Path);
file.open(QIODevice::ReadOnly);
float filesize = file.size() - 4096;
if(filesize <= 0)
{
plan = 100;
file.close();
return true;
}
//_______________________________________________________________________________________________________________
QDataStream filein(&file);
QByteArray filedata;
filedata.resize(4096);
int filereadsize = filein.readRawData(filedata.data(), 4096);
file.seek(0);
if(filereadsize != 4096)
{
return false;
}
ecry_header pHeader;
memcpy(&pHeader, filedata.data(), sizeof(struct ecry_header));
//_______________________________________________________________________________________________________________
QDataStream in(&file);
QByteArray data;
data.resize(size);
QFile writefile;
QString name = Path + QString(".tmp");
writefile.setFileName(name);
writefile.open(QIODevice::WriteOnly);
chmod(name.toStdString().c_str(), 0666); //0000
char* pbuf = new char[4096];
int readsize = in.readRawData(data.data(), size);
if(readsize != 4096)
{
file.close();
writefile.close();
plan = 100; QFile::remove(name);
return false;
}
switch (type)
{
case FileHeader::TEST_1: case FileHeader::TEST_2:
{
qDebug("test1");
int flag = (type == FileHeader::TEST_1) ? 0x01 : 0x00;
while(!in.atEnd())
{
if(is_close)
{
file.close();
writefile.close();
plan = 100;
QFile::remove(name);
return true;
}
int readsize = in.readRawData(data.data(), size);
long lResult = -1;
memset(pbuf, 0, 4096);
Mutex_work.lock();
lResult = DecryptPrivate(2, data.data(), readsize, pbuf,TRUE);
Mutex_work.unlock();
if(lResult == false)
{
file.close();
writefile.close();
plan = 100;
QFile::remove(name);
return false;
}
if(writefile.write(pbuf, readsize) != readsize)
{
file.close();
writefile.close();
plan = 100;
return false;
}
plan = 100 * (writefile.size() / filesize);
}
//success
plan = 100;
}
break;
default:
{
while(!in.atEnd())
{
if(is_close)
{
file.close();
writefile.close();
plan = 100;
QFile::remove(name);
return true;
}
int readsize = in.readRawData(data.data(), size);
long lResult = -1;
memset(pbuf, 0, 4096);
Mutex_work.lock();
lResult = DecryptPrivate(1, data.data(), readsize, pbuf,FALSE);
Mutex_work.unlock();
if(lResult == false)
{
file.close();
writefile.close();
plan = 100;
QFile::remove(name);
return false;
}
if(writefile.write(pbuf, readsize) != readsize)
{
file.close();
writefile.close();
plan = 100;
return false;
}
plan = 100 * (writefile.size() / filesize);
}
//success
plan = 100;
}
break;
}
file.close();
writefile.close();
m_removePath(Path){
QString name = Path + QString(".tmp");
QFile::remove(Ppath;
chmod(decodeFileName.toStdString().c_str(), 0777);
}
delete[] pbuf;
float s = time.elapsed()/(float)1000.00f;
float m = filesize / 1048576.00f;
decryptTime = s;
qDebug() << "filepath:" << Path << " size:" << m << "m" << " time:" << s << " speed:" << m / s << "m/s";
return true;