Index: src/libchcore/TOverlappedReaderFB.cpp =================================================================== diff -u -N -ra1f5b3d99f2f175b102d81379698ea1f08e42cce -r8aa9ecb7ccb06d721b9717a4bb664651b0b8b10e --- src/libchcore/TOverlappedReaderFB.cpp (.../TOverlappedReaderFB.cpp) (revision a1f5b3d99f2f175b102d81379698ea1f08e42cce) +++ src/libchcore/TOverlappedReaderFB.cpp (.../TOverlappedReaderFB.cpp) (revision 8aa9ecb7ccb06d721b9717a4bb664651b0b8b10e) @@ -19,6 +19,7 @@ #include "stdafx.h" #include "TOverlappedReaderFB.h" #include "TCoreException.h" +#include "TFileInfo.h" namespace chcore { @@ -43,6 +44,29 @@ { } + TSubTaskBase::ESubOperationResult TOverlappedReaderFB::Start() + { + // update the source file size (it might differ from the time this file was originally scanned). + // NOTE: this kind of update could be also done when copying chunks of data beyond the original end-of-file, + // but it would require frequent total size updates and thus - serializations). + // NOTE2: the by-chunk corrections of stats are still applied when copying to ensure even further size + // matching; this update however still allows for better serialization management. + file_size_t fsOldSize = m_spSrcFileInfo->GetLength64(); + file_size_t fsNewSize = 0; + + TSubTaskBase::ESubOperationResult eResult = m_spSrcFile->GetFileSize(fsNewSize); + if(eResult != TSubTaskBase::eSubResult_Continue) + return eResult; + + if(fsNewSize != fsOldSize) + { + m_spStats->AdjustTotalSize(fsOldSize, fsNewSize); + m_spSrcFileInfo->SetLength64(fsNewSize); + } + + return eResult; + } + void TOverlappedReaderFB::SetReleaseMode() { m_spReader->ReleaseBuffers();