【发布时间】:2010-02-26 03:31:11
【问题描述】:
我制作了一个复制文件的应用程序,通常是大文件。我想显示复制的进度,但我无法将它带到工作中。有人可以告诉我我做错了什么吗? 现在它非常有趣。 % 到 49%,然后回到 0,然后到 40,然后再回到 0,然后再回到 35,这样一直持续,直到它成功复制文件,但我不明白为什么我会这样奇怪的百分比。这可能是因为我像以后那样计算百分比变量?如果我想以这种方式计算百分比:百分比 = TotalBytesTransferred*100/TotalFileSize;然后我得到一个编译器错误:“错误C2676:二进制'*':'LARGE_INTEGER'没有定义此运算符或转换为预定义运算符可接受的类型”,这就是我这样计算的原因。
提前致谢!
坎皮
代码:
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;
}
【问题讨论】: