| | |
| | | #include <QDebug> |
| | | #include <QDateTime> |
| | | #include <QString> |
| | | |
| | | #include <memory> |
| | | #define DEFAULT_PATH ("E:\soft") |
| | | #define DEFAULT_TYPE (tr("Pkg Files (*.zip *.tar.gz *.rar *.7z *.bz2)")) |
| | | #define UPLOAD 10 |
| | |
| | | + createDate.toString() + "#" |
| | | + description; |
| | | qDebug()<<versionMessage; |
| | | |
| | | emit addFileSignal(file, versionMessage); |
| | | // è·åæä»¶åºæ¬ä¿¡æ¯ |
| | | QString fileName = fileInfo.fileName(); |
| | | qint64 size = fileInfo.size(); |
| | | |
| | | |
| | | |
| | | // 计ç®å¤´æ¶æ¯é¿åº¦ï¼å¹¶åé
ç©ºé´ |
| | | // å¤´æ¶æ¯ï¼ç¤ºä¾ï¼ |
| | | int len = sizeof(UpLoadPkgHead) + fileName.size() + 1; |
| | | |
| | | std::shared_ptr<char> head(new char[len],[](char *p){delete[] p;}); |
| | | UpLoadPkgHead* pHead = reinterpret_cast<UpLoadPkgHead*>(head.get()); |
| | | |
| | | // ç´æ¥æä½æºè½æé管ççå
å |
| | | pHead->head.type = UPLOAD_REQ; |
| | | pHead->head.len = len; |
| | | memcpy(pHead->fileName, fileName.toUtf8().constData(), fileName.size()); |
| | | pHead->fileName[fileName.size()] = '\0'; |
| | | |
| | | emit addFileSignal(head, len); // ç´æ¥ä¼ éæºè½æé |
| | | |
| | | |
| | | QFile *pFile = new QFile(file); |
| | | if(!pFile){ |
| | | return; |
| | | } |
| | | |
| | | // 读æä»¶å
容 |
| | | |
| | | if (!pFile->open(QIODevice::ReadOnly)) { |
| | | qDebug() << "Failed to open file for reading:" << pFile->errorString(); |
| | | return; |
| | | } |
| | | // const int bufferSize = 4 * 1024; |
| | | const int bufferSize = 8 * 1024; |
| | | auto buffer = std::unique_ptr<char>(new char[bufferSize]); |
| | | qint64 totalBytesRead = 0; |
| | | int flag = 0; |
| | | while (!pFile->atEnd()) { |
| | | qint64 bytesRead = pFile->read(buffer.get(), bufferSize); |
| | | if (bytesRead == -1) { |
| | | qDebug() << "Error during read operation:" << pFile->errorString(); |
| | | break; |
| | | } |
| | | totalBytesRead += bytesRead; |
| | | |
| | | // æ°æ®å
æé ï¼ç¤ºä¾ï¼ |
| | | int dtlen = sizeof(UpLoadPkgData) + fileName.size() + bytesRead + 2; |
| | | std::shared_ptr<char> dataPkg(new char[dtlen],[](char *p){delete[] p;}); |
| | | UpLoadPkgData* pData = reinterpret_cast<UpLoadPkgData*>(dataPkg.get()); |
| | | |
| | | // å¡«å
æ°æ® |
| | | pData->head.len = len; |
| | | pData->head.type = UPLOAD_REQ; |
| | | pData->upLoadType = DATA_UPLOAD_REQ; |
| | | pData->fileNameLen = fileName.size(); |
| | | pData->dataLen = bytesRead; |
| | | pData->flag = ++flag; |
| | | pData->dataLen = bytesRead; |
| | | memcpy(pData->data, fileName.toUtf8().constData(), fileName.size()); |
| | | memcpy(pData->data + fileName.size() + 1, buffer.get(), bytesRead); |
| | | |
| | | emit addFileSignal(dataPkg, dtlen); |
| | | // æ éæå¨ freeï¼shared_ptr èªå¨éæ¾ |
| | | |
| | | } |
| | | if(totalBytesRead != size){ |
| | | qDebug()<<"æ°æ®åéä¸å®æ´"; |
| | | return; |
| | | } |
| | | qDebug()<<"æ°æ®åé宿ï¼åéæ°æ®åºå
"; |
| | | |
| | | int finLen = sizeof(UpLoadPkgFin)+fileName.size()+versionMessage.size()+2; |
| | | std::shared_ptr<char> finPkg(new char[finLen],[](char *p){delete[] p;}); |
| | | UpLoadPkgFin* pData = reinterpret_cast<UpLoadPkgFin*>(finPkg.get()); |
| | | |
| | | // å¡«å
æ°æ® |
| | | pData->head.len = finLen; |
| | | pData->head.type = UPLOAD_REQ; |
| | | pData->fileNameLen = fileName.size(); |
| | | pData->cnt = flag; |
| | | memcpy(pData->fileName, fileName.toUtf8().constData(), fileName.size()); |
| | | memcpy(pData->fileName + fileName.size() + 1,versionMessage.data(),versionMessage.size()); |
| | | |
| | | emit addFileSignal(finPkg ,finLen); |
| | | emit addFileMsg(QString("ä¸ä¼ æåï¼")); |
| | | |
| | | delete pFile; |
| | | } |