Index: src/libchcore/TSubTaskCopyMove.cpp =================================================================== diff -u -N -rc719644bb4360fcf7ccf6f1139bcae852bd6effd -rbaad6054459abaaf69cbfd1ebad8783085160d99 --- src/libchcore/TSubTaskCopyMove.cpp (.../TSubTaskCopyMove.cpp) (revision c719644bb4360fcf7ccf6f1139bcae852bd6effd) +++ src/libchcore/TSubTaskCopyMove.cpp (.../TSubTaskCopyMove.cpp) (revision baad6054459abaaf69cbfd1ebad8783085160d99) @@ -215,13 +215,15 @@ if(spFileInfo->IsDirectory()) { eResult = tFilesystemFBWrapper.CreateDirectoryFB(ccp.pathDstFile); - if(eResult != eSubResult_Continue) + if(eResult == eSubResult_SkipFile) + { + spFileInfo->MarkAsProcessed(false); + AdjustProcessedSizeForSkip(spFileInfo); + } + else if(eResult != eSubResult_Continue) return eResult; - - // new stats - AdjustProcessedSizeForSkip(spFileInfo); - - spFileInfo->MarkAsProcessed(true); + else + spFileInfo->MarkAsProcessed(true); } else { @@ -246,21 +248,10 @@ tFilesystemFBWrapper.DeleteFileFB(spFileInfo, GetTaskPropValue(rConfig)); } } - - // only set attributes and times when file/dir had been processed successfully. - if(spFileInfo->IsProcessed()) - { - if(GetTaskPropValue(rConfig)) - spFilesystem->SetFileDirectoryTime(ccp.pathDstFile, spFileInfo->GetCreationTime(), spFileInfo->GetLastAccessTime(), spFileInfo->GetLastWriteTime()); // no error checking (but most probably it should be checked) - - // attributes - if(GetTaskPropValue(rConfig)) - spFilesystem->SetAttributes(ccp.pathDstFile, spFileInfo->GetAttributes()); // as above - } } // update directories file times - bool bUpdateDirTimes = GetTaskPropValue(rConfig); + bool bUpdateDirTimes = GetTaskPropValue(rConfig); if(bUpdateDirTimes) { LOG_INFO(m_spLog) << _T("Setting directory attributes"); @@ -281,7 +272,14 @@ { TSmartPath pathDstDir = tDstPathProvider.CalculateDestinationPath(spFileInfo); - spFilesystem->SetFileDirectoryTime(pathDstDir, spFileInfo->GetCreationTime(), spFileInfo->GetLastAccessTime(), spFileInfo->GetLastWriteTime()); + eResult = tFilesystemFBWrapper.SetFileDirBasicInfo(pathDstDir, spFileInfo->GetAttributes(), spFileInfo->GetCreationTime(), spFileInfo->GetLastAccessTime(), spFileInfo->GetLastWriteTime()); + if(eResult == eSubResult_SkipFile) + continue; + if(eResult != eSubResult_Continue) + { + LOG_INFO(m_spLog) << _T("Stopped updating directories' times and dates"); + break; + } } } } @@ -383,7 +381,8 @@ dwCurrentBufferSize, bNoBuffer, GetTaskPropValue(rConfig), - pData->bOnlyCreate); + pData->bOnlyCreate, + GetTaskPropValue(rConfig)); ESubOperationResult eResult = tReaderWriter.Process();