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 06: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 05:55 | 2useven10 | Note Added: 0009320 | |
| 2012-06-08 05:55 | 2useven10 | Assigned To | => 2useven10 |
| 2012-06-08 05:55 | 2useven10 | Status | new => feedback |
| 2012-06-09 07:53 | pm_kan | Note Added: 0009324 | |
| 2012-06-14 06:18 | 2useven10 | Build | => 2724 |
| 2012-06-14 06:18 | 2useven10 | Status | feedback => closed |
| 2012-06-14 06:18 | 2useven10 | Resolution | open => fixed |
| 2012-06-14 06:18 | 2useven10 | Fixed in Version | => 3.0 |