View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001666 | Far Manager | File System | public | 2011-01-16 13:19 | 2012-06-14 07:18 |
Reporter | rip.nsk | Assigned To | 2useven10 | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Platform | x86 | OS | Windows | OS Version | 7 |
Product Version | 2.0 | ||||
Fixed in Version | 3.0 | ||||
Summary | 0001666: информация о копирование нескольких файлов | ||||
Description | при копировании нескольких файлов (без "общего" индикатора) неверно показывается скорость\осталось времени: для первого файла все нормально, для остальных, вероятно, при вычислении этих значений происходит деление на <время копирования всех файлов> вместо <времени копирования текущего файла>. соответственно отображаемая скорость получается много меньше реальной, а предсказанное время - много больше (зато идет быстрее). | ||||
Tags | No tags attached. | ||||
Build | 2724 | ||||
|
cp2.patch (4,965 bytes)
Index: copy.cpp =================================================================== --- copy.cpp (revision 5506) +++ copy.cpp (working copy) @@ -201,15 +201,15 @@ void Flush(); void DrawNames(); void CreateScanBackground(); - void SetProgress(bool TotalProgress,UINT64 CompletedSize,UINT64 TotalSize); + void SetProgress(bool TotalProgress,UINT64 CompletedSize,UINT64 TotalSize,UINT64 FullCompletedSize); public: CopyProgress(bool Move,bool Total,bool Time); void CreateBackground(); bool Cancelled() {return IsCancelled;}; void SetScanName(const wchar_t *Name); void SetNames(const wchar_t *Src,const wchar_t *Dst); - void SetProgressValue(UINT64 CompletedSize,UINT64 TotalSize) {return SetProgress(false,CompletedSize,TotalSize);} - void SetTotalProgressValue(UINT64 CompletedSize,UINT64 TotalSize) {return SetProgress(true,CompletedSize,TotalSize);} + void SetProgressValue(UINT64 CompletedSize,UINT64 TotalSize,UINT64 FullCompletedSize) {return SetProgress(false,CompletedSize,TotalSize,FullCompletedSize);} + void SetTotalProgressValue(UINT64 CompletedSize,UINT64 TotalSize) {return SetProgress(true,CompletedSize,TotalSize,CompletedSize);} }; static void GetTimeText(DWORD Time,string &strTimeText) @@ -383,7 +383,7 @@ Flush(); } -void CopyProgress::SetProgress(bool TotalProgress,UINT64 CompletedSize,UINT64 TotalSize) +void CopyProgress::SetProgress(bool TotalProgress,UINT64 CompletedSize,UINT64 TotalSize,UINT64 FullCompletedSize) { if (!BgInit) { @@ -446,10 +446,10 @@ { if (TotalProgress) { - OldCompletedSize=OldCompletedSize-TotalSkippedSize; + FullCompletedSize-=TotalSkippedSize; } - UINT64 CPS=CalcTime?OldCompletedSize/CalcTime:0; + UINT64 CPS=CalcTime?FullCompletedSize/CalcTime:0; DWORD TimeLeft=static_cast<DWORD>(CPS?SizeLeft/CPS:0); string strSpeed; FileSizeToStr(strSpeed,CPS,8,COLUMN_FLOATSIZE|COLUMN_COMMAS); @@ -2335,7 +2335,7 @@ if (!(Flags&FCOPY_COPYTONUL) && StrCmpI(strDestPath,L"prn")) SetDestDizPath(strDestPath); - CP->SetProgressValue(0,0); + CP->SetProgressValue(0,0,TotalCopiedSize); CP->SetNames(Src,strDestPath); int IsSetSecuty=FALSE; @@ -2712,10 +2712,11 @@ if (NWFS_Attr) apiSetFileAttributes(strDestPath,SrcData.dwFileAttributes); - if (ShowTotalCopySize && MoveCode) + if (MoveCode) { TotalCopiedSize+=SrcData.nFileSize; - CP->SetTotalProgressValue(TotalCopiedSize,TotalCopySize); + if (ShowTotalCopySize) + CP->SetTotalProgressValue(TotalCopiedSize,TotalCopySize); } AskDelete=0; @@ -3174,7 +3175,7 @@ FILE_ALLOCATED_RANGE_BUFFER ranges[1024]; queryrange.FileOffset.QuadPart = 0; queryrange.Length.QuadPart = SrcData.nFileSize; - CP->SetProgressValue(0,0); + CP->SetProgressValue(0,0,TotalCopiedSize); do { @@ -3226,7 +3227,7 @@ PR_ShellCopyMsg(); } - CP->SetProgressValue(CurCopiedSize,SrcData.nFileSize); + CP->SetProgressValue(CurCopiedSize,SrcData.nFileSize,TotalCopiedSize); if (ShowTotalCopySize) { @@ -3284,7 +3285,7 @@ } } - CP->SetProgressValue(0,0); + CP->SetProgressValue(0,0,TotalCopiedSize); SetLastError(_localLastError=LastError); CurCopiedSize = 0; // ������� ������ �������� return COPY_FAILURE; @@ -3439,7 +3440,7 @@ apiDeleteFile(strDestName); //BUGBUG } - CP->SetProgressValue(0,0); + CP->SetProgressValue(0,0,TotalCopiedSize); SetLastError(_localLastError=LastError); if (SplitSkipped) @@ -3458,10 +3459,9 @@ CurCopiedSize+=BytesWritten; - if (ShowTotalCopySize) - TotalCopiedSize+=BytesWritten; + TotalCopiedSize+=BytesWritten; - CP->SetProgressValue(CurCopiedSize,SrcData.nFileSize); + CP->SetProgressValue(CurCopiedSize,SrcData.nFileSize,TotalCopiedSize); if (ShowTotalCopySize) { @@ -4038,7 +4038,7 @@ return COPY_CANCEL; CP->SetNames(SrcName,DestName); - CP->SetProgressValue(0,0); + CP->SetProgressValue(0,0,TotalCopiedSize); TotalCopiedSizeEx=TotalCopiedSize; if (!apiCopyFileEx(SrcName,DestName,CopyProgressRoutine,nullptr,nullptr,Flags&FCOPY_DECRYPTED_DESTINATION?COPY_FILE_ALLOW_DECRYPTED_DESTINATION:0)) { @@ -4077,12 +4077,13 @@ } CurCopiedSize = TotalBytesTransferred.QuadPart; - CP->SetProgressValue(TotalBytesTransferred.QuadPart,TotalFileSize.QuadPart); + CP->SetProgressValue(TotalBytesTransferred.QuadPart,TotalFileSize.QuadPart,TotalCopiedSize); - if (ShowTotalCopySize && dwStreamNumber==1) + if (dwStreamNumber==1) { TotalCopiedSize=TotalCopiedSizeEx+CurCopiedSize; - CP->SetTotalProgressValue(TotalCopiedSize,TotalCopySize); + if (ShowTotalCopySize) + CP->SetTotalProgressValue(TotalCopiedSize,TotalCopySize); } return Abort?PROGRESS_CANCEL:PROGRESS_CONTINUE; |
|
Воспроизводится на 2.0.1807, при [ ] Показывать общий индикатор копирования [x] Показывать информацию о времени копирования слегка "костыльный" вариант исправления приложен (в SetProgress через доп. параметр передается обновляемый TotalCopiedSize). |
|
build 2724. В описанном случае показываем оценки скорости и оставшегося времени для текущего файла. |
|
Не воспроизводится на 2725 |
Date Modified | Username | Field | Change |
---|---|---|---|
2011-01-16 13:19 | rip.nsk | New Issue | |
2011-02-22 18:17 | pm_kan | File Added: cp2.patch | |
2011-02-22 18:18 | pm_kan | Note Added: 0006466 | |
2012-06-08 06:55 | 2useven10 | Note Added: 0009320 | |
2012-06-08 06:55 | 2useven10 | Assigned To | => 2useven10 |
2012-06-08 06:55 | 2useven10 | Status | new => feedback |
2012-06-09 08:53 | pm_kan | Note Added: 0009324 | |
2012-06-14 07:18 | 2useven10 | Build | => 2724 |
2012-06-14 07:18 | 2useven10 | Status | feedback => closed |
2012-06-14 07:18 | 2useven10 | Resolution | open => fixed |
2012-06-14 07:18 | 2useven10 | Fixed in Version | => 3.0 |