gpt4 book ai didi

c - 如何正确使用 CopyFileEx 和 CopyProgressRoutine 函数?

转载 作者:太空宇宙 更新时间:2023-11-04 04:58:14 25 4
gpt4 key购买 nike

我做了一个复制文件的应用程序,通常是大文件。我想显示复制的进度,但我不能让它发挥作用。有人可以告诉我我做错了什么吗?现在它的工作非常有趣。 % 比 49%,回到 0,然后回到 40,然后又回到 0,然后回到 35,这样继续,直到成功复制文件,但我不明白为什么我得到这样一个奇怪的百分比。这可能是因为我像以后那样计算百分比变量?如果我想这样计算百分比:percent = TotalBytesTransferred*100/TotalFileSize;然后我得到一个编译器错误:“error C2676: binary '*' : 'LARGE_INTEGER' does not define this operator or a conversion to a type acceptable to the predefined operator”,这就是我计算的原因。

提前致谢!

坎比

代码:

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;
}

最佳答案

__int64 percent = (TotalBytesTransferred.HighPart * 2147483648 + TotalBytesTransferred.LowPart) * 100 / (TotalFileSize.HighPart * 2147483648 + TotalFileSize.LowPart);

你有逻辑错误! TotalBytesTransferred 更改为 TotalFileSize

关于c - 如何正确使用 CopyFileEx 和 CopyProgressRoutine 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2339313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com