如何在 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 模板?

Wininet & C++:使用 FTP 写入和附加,而不是覆盖,文件

FTP 异步操作上的 ERROR_IO_PENDING [Wininet C++]

使用 WinInet VB.net 测试与 FTP 服务器的连接

wininet ftp程序遇到seg错误

C++ WinInet InternetCloseHandle 崩溃