24     mDestination( destination )
 
   30   QFile fileSource( mSource );
 
   31   if ( !fileSource.exists() )
 
   33     mErrorString = tr( 
"Source file '%1' does not exist" ).arg( mSource );
 
   37   if ( QFileInfo( mDestination ).isDir() )
 
   39     mDestination = QDir( mDestination ).absoluteFilePath( QFileInfo( fileSource ).fileName() );
 
   42   QFile fileDestination( mDestination );
 
   43   if ( fileDestination.exists() )
 
   45     mErrorString = tr( 
"Destination file '%1' already exist" ).arg( mDestination );
 
   49   const QDir destinationDir = QFileInfo( mDestination ).absoluteDir();
 
   50   if ( !destinationDir.exists() )
 
   52     mErrorString = tr( 
"Destination directory '%1' does not exist" ).arg( destinationDir.absolutePath() );
 
   56   fileSource.open( QIODevice::ReadOnly );
 
   57   fileDestination.open( QIODevice::WriteOnly );
 
   59   const int size = fileSource.size();
 
   60   const int chunkSize = std::clamp( size / 100, 1024, 1024 * 1024 );
 
   63   std::vector<char> data( chunkSize );
 
   66     const int len = fileSource.read( data.data(), chunkSize );
 
   69       mErrorString = tr( 
"Fail reading from '%1'" ).arg( mSource );
 
   77     if ( fileDestination.write( data.data(), len ) != len )
 
   79       mErrorString = tr( 
"Fail writing to '%1'" ).arg( mDestination );
 
   84     setProgress( 
static_cast<double>( bytesRead ) / size );
 
   90   fileDestination.close();
 
const QString & destination() const
It could be different from the original one.
bool run() override
Performs the task's operation.
const QString & errorString() const
Returns errorString if an error occurred, else returns null QString.
QgsCopyFileTask(const QString &source, const QString &destination)
Creates a task that copy source file to destination.
void setProgress(double progress)
Sets the task's current progress.