Index: src/libchengine/TSubTaskCopyMove.cpp =================================================================== diff -u -N -r08717141ce5f6926116c298cbc9442094a45bb67 -rb9453afbc6264bc3f3c6a7f86fadab7744e0fb16 --- src/libchengine/TSubTaskCopyMove.cpp (.../TSubTaskCopyMove.cpp) (revision 08717141ce5f6926116c298cbc9442094a45bb67) +++ src/libchengine/TSubTaskCopyMove.cpp (.../TSubTaskCopyMove.cpp) (revision b9453afbc6264bc3f3c6a7f86fadab7744e0fb16) @@ -57,7 +57,7 @@ } TFileInfoPtr spSrcFile; // CFileInfo - src file - TSmartPath pathDstFile; // dest path with filename + TDestinationPathProvider* pDstPathProvider = nullptr; TBufferSizes tBufferSizes; TOverlappedMemoryPoolPtr spMemoryPool; // buffer handling @@ -209,16 +209,14 @@ continue; } - // set dest path with filename - ccp.pathDstFile = tDstPathProvider.CalculateDestinationPath(spFileInfo); - // are the files/folders lie on the same partition ? bool bMove = GetContext().GetOperationType() == eOperation_Move; // if folder - create it if(spFileInfo->IsDirectory()) { - eResult = tFilesystemFBWrapper.CreateDirectoryFB(ccp.pathDstFile); + TSmartPath pathDstFile = tDstPathProvider.CalculateDestinationPath(spFileInfo); + eResult = tFilesystemFBWrapper.CreateDirectoryFB(pathDstFile); if(eResult == eSubResult_SkipFile) { spFileInfo->MarkAsProcessed(false); @@ -231,7 +229,7 @@ } else { - // start copying/moving file + ccp.pDstPathProvider = &tDstPathProvider; ccp.spSrcFile = spFileInfo; // copy data @@ -377,7 +375,7 @@ rThreadController, rThreadPool, pData->spSrcFile, - pData->pathDstFile, + *pData->pDstPathProvider, m_spSubTaskStats, m_spLog->GetLogFileData(), pData->spMemoryPool,