/*! * * Copyright (c) 2022-2022 Diality Inc. - All Rights Reserved. * \copyright * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * \file main.cpp * \author (last) Behrouz NematiPour * \date (last) 08-Jun-2022 * \author (original) Behrouz NematiPour * \date (original) 08-Jun-2022 * */ /* Work in progress code and has be embedded in the code. #include #include #include #include #include #include #include #include #define APPNAME "fileCopy" #define VERSION "v0.0.5.2" enum Error_Enums { eOK , eNotEnoughParametes , eSrcFileNotExist , eDstFolderNotExist , eDstFolderMakeError , eSrcOpenError , eDstOpenError , eSrcReadError , eDstWriteError , eDstFlushError , } err = eOK; int main(int argc, char *argv[]) { std::cout << APPNAME << " " << VERSION << std::endl; int chunkSize = 1024 * 2; bool createFolder = argc > 3 && std::strcmp(argv[3], "-c") == 0; QString srcFileName; QString dstFileName; QDir dstDir; QFile srcFile; QFile dstFile; qint64 totalSize = 0; qint64 copySize = 0; if ( argc < 3 ) { err = eNotEnoughParametes ; goto lErr; } srcFileName = argv[1]; dstFileName = argv[2]; if ( ! QFileInfo(srcFileName).exists() ) { err = eSrcFileNotExist ; goto lErr; } dstDir = QFileInfo(dstFileName).absoluteDir(); if ( ! createFolder ) { if ( ! dstDir.exists() ) { err = eDstFolderNotExist ; goto lErr; }} else { if ( ! dstDir.mkpath ( dstDir.path() ) ) { err = eDstFolderMakeError ; goto lErr; }} srcFile.setFileName(srcFileName); dstFile.setFileName(dstFileName); if ( ! srcFile.open(QIODevice::ReadOnly )) { err = eSrcOpenError ; goto lErr; } if ( ! dstFile.open(QIODevice::WriteOnly )) { err = eDstOpenError ; goto lErr; } totalSize = srcFile.size(); copySize = totalSize; std::cout << "start ..." << std::endl; std::cout << "Src: " << srcFileName.toStdString() << " " << (totalSize > 1024*1024 ? (totalSize / 1024 / 1024) : (totalSize / 1024)) << (totalSize > 1024*1024 ? "M" : "K" ) << std::endl; std::cout << "Dst: " << dstFileName.toStdString() << std::endl; while ( copySize ) { char chunkData[chunkSize] = {}; const qint64 readSize = srcFile.read (chunkData, chunkSize); if ( readSize < 0 ) { err = eSrcOpenError ; goto lErr; } const qint64 writeSize = dstFile.write(chunkData, readSize); if ( writeSize < 0 ) { err = eDstWriteError ; goto lErr; } if ( readSize >= chunkSize ) { // a full chunk was available to read copySize -= writeSize; // writeSize; } else { // Not a full chunk available EOF copySize = 0; } int copyPercent = int(((float((totalSize - copySize))) / float(totalSize)) * 100); std::cout << "\r" << "%" << copyPercent; } // close source srcFile.close(); // close destination if ( ! dstFile.flush() ) { err = eDstFlushError ; goto lErr; } dstFile.close(); std::cout << "\nFinish" << std::endl; return eOK; lErr: std::cout << "\nError: " << err << std::endl; return err; } */