Я сделал приложение, которое копирует файлы, обычно большие файлы. Я хочу показать прогресс копирования, но не могу заставить его работать. Может кто-нибудь сказать мне, что я делаю не так?
Сейчас это работает очень интересно. % Увеличивается до 49%, затем возвращается к 0, затем к 40, затем снова к 0, а затем к 35, и так далее до тех пор, пока файл не будет успешно скопирован, но я не понимаю, почему я получаю такой странное восприятие. Это может быть потому, что я вычисляю переменную процента, как я делаю это позже? Если я хочу рассчитать проценты следующим образом: процент = TotalBytesTransferred * 100 / TotalFileSize; тогда я получаю ошибку компилятора: «ошибка C2676: двоичный файл * *:« LARGE_INTEGER »не определяет этот оператор или преобразование в тип, приемлемый для предопределенного оператора», и именно поэтому я рассчитываю именно так *
Заранее спасибо!
Kampi
Код:
UINT CopyThread( LPVOID pParam )
{
....
....
....
ret = CopyFileExA( Address.from, Address.to, &MyCopyProgressRoutine, ptr, FALSE,FALSE);
....
....
}
DWORD CALLBACK MyCopyProgressRoutine(
LARGE_INTEGER TotalFileSize, // file size
LARGE_INTEGER TotalBytesTransferred, // bytes transferred
LARGE_INTEGER StreamSize, // bytes in stream
LARGE_INTEGER StreamBytesTransferred, // bytes transferred for stream
DWORD dwStreamNumber, // current stream
DWORD dwCallbackReason, // callback reason
HANDLE hSourceFile, // handle to source file
HANDLE hDestinationFile, // handle to destination file
LPVOID lpData // from CopyFileEx
)
{
TCHAR currentprog[20];
CGetFileListDlg* ptr = (CGetFileListDlg*)lpData;
// do something with pointer, e.g. ptr->m_Progressbar.Pos blahblah
//ptr->m_fileprog.Clear();
//ptr->UpdateWindow();
DWORD percent = (TotalBytesTransferred.HighPart*2^31 + TotalBytesTransferred.LowPart) * 100/(TotalFileSize.HighPart*2^31 + TotalBytesTransferred.LowPart);
wsprintf( currentprog, _T("%d %%"),percent );
ptr->m_fileprog.SetWindowText( currentprog );
return PROGRESS_CONTINUE;
}