View Issue Details

IDProjectCategoryView StatusLast Update
0001666Far ManagerFile Systempublic2012-06-14 07:18
Reporterrip.nsk Assigned To2useven10  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Platformx86OSWindowsOS Version7
Product Version2.0 
Fixed in Version3.0 
Summary0001666: информация о копирование нескольких файлов
Descriptionпри копировании нескольких файлов (без "общего" индикатора) неверно показывается скорость\осталось времени: для первого файла все нормально, для остальных, вероятно, при вычислении этих значений происходит деление на <время копирования всех файлов> вместо <времени копирования текущего файла>.
соответственно отображаемая скорость получается много меньше реальной, а предсказанное время - много больше (зато идет быстрее).
TagsNo tags attached.
Build2724

Activities

pm_kan

2011-02-22 18:17

reporter  

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;
cp2.patch (4,965 bytes)   

pm_kan

2011-02-22 18:18

reporter   bugnote:0006466

Воспроизводится на 2.0.1807, при
 [ ] Показывать общий индикатор копирования
 [x] Показывать информацию о времени копирования

слегка "костыльный" вариант исправления приложен (в SetProgress через доп. параметр передается обновляемый TotalCopiedSize).

2useven10

2012-06-08 06:55

developer   bugnote:0009320

build 2724.
В описанном случае показываем оценки скорости и оставшегося времени для текущего файла.

pm_kan

2012-06-09 08:53

reporter   bugnote:0009324

Не воспроизводится на 2725

Issue History

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