如何在 WinInet C++ 中获取 FTP 下载的进度
Posted
技术标签:
【中文标题】如何在 WinInet C++ 中获取 FTP 下载的进度【英文标题】:How can I get the progress of an FTP Download in WinInet C++ 【发布时间】:2015-10-11 10:26:23 【问题描述】:我正在创建一个从 FTP 服务器下载文件的程序。我想显示用户下载了多少字节的进度。我已经尝试搜索它,但我找不到任何东西。首先,我的计划是使用 fstream 获取文件大小,但后来我意识到我不能同时共享 2 个进程。
【问题讨论】:
【参考方案1】:我假设您正在使用FtpGetFile(..)
从 FTP 服务器下载文件。这是下载文件的简单方法,它不提供有关已下载多少字节的信息,并且您几乎无法控制函数的行为方式(例如,根据用户请求取消下载?)。不过,对于快速测试,它非常有帮助。
为了监控下载进度,请执行以下操作:
-
使用
FtpFindFirstFile
确定远程文件的大小。
使用FtpOpenFile
打开远程文件。
使用CreateFile
创建本地文件。
使用InternetReadFile
从远程文件中读取一些字节。
评估InternetReadFile
的返回值和错误代码检测错误以及传输是否完成。
使用WriteFile
将这些字节写入本地文件。
计算/更新您的进度信息。
如果文件未完全下载且没有错误,则返回第 4 步。
使用CloseHandle
关闭本地文件。
使用InternetCloseHandle
关闭远程文件。
如果您需要更多帮助,我可以提供一些代码...
【讨论】:
以上是关于如何在 WinInet C++ 中获取 FTP 下载的进度的主要内容,如果未能解决你的问题,请参考以下文章
Wininet & C++:使用 FTP 写入和附加,而不是覆盖,文件
FTP 异步操作上的 ERROR_IO_PENDING [Wininet C++]