如何在 WinInet C++ 中获取 FTP 下载的进度

How can I get the progress of an FTP Download in WinInet C++

我正在创建一个从 FTP 服务器下载文件的程序。我想显示用户下载了多少字节的进度。我曾尝试搜索它,但找不到任何东西。首先,我的计划是使用 fstream 获取文件大小,但后来我意识到我不能同时共享 2 个进程。

我假设您正在使用 FtpGetFile(..) 从 FTP 服务器下载文件。这是下载文件的简单方法,它不会向您提供有关已下载多少字节的信息,并且您几乎无法控制该功能的行为方式(例如,根据用户请求取消下载?)。不过,对于快速测试,它非常有帮助。

为了监控下载进度,请执行以下操作:

  1. 使用 FtpFindFirstFile 确定远程文件的大小。
  2. 使用 FtpOpenFile 打开远程文件。
  3. 使用 CreateFile 创建本地文件。
  4. 使用 InternetReadFile 从远程文件中读取一些字节。
  5. 评估 return 的值和错误代码 InternetReadFile 检测错误以及传输是否完成。
  6. 使用WriteFile将这些字节写入本地文件。
  7. Calculate/Update你的进度信息。
  8. 如果文件未完全下载且没有错误,请返回第 4 步。
  9. 使用CloseHandle关闭本地文件。
  10. 使用 InternetCloseHandle 关闭远程文件。

如果您需要更多帮助,我可以提供一些执行此操作的代码...