如何在 WinInet C++ 中获取 FTP 下载的进度
How can I get the progress of an FTP Download in WinInet C++
我正在创建一个从 FTP 服务器下载文件的程序。我想显示用户下载了多少字节的进度。我曾尝试搜索它,但找不到任何东西。首先,我的计划是使用 fstream 获取文件大小,但后来我意识到我不能同时共享 2 个进程。
我假设您正在使用 FtpGetFile(..)
从 FTP 服务器下载文件。这是下载文件的简单方法,它不会向您提供有关已下载多少字节的信息,并且您几乎无法控制该功能的行为方式(例如,根据用户请求取消下载?)。不过,对于快速测试,它非常有帮助。
为了监控下载进度,请执行以下操作:
- 使用
FtpFindFirstFile
确定远程文件的大小。
- 使用
FtpOpenFile
打开远程文件。
- 使用
CreateFile
创建本地文件。
- 使用
InternetReadFile
从远程文件中读取一些字节。
- 评估 return 的值和错误代码
InternetReadFile
检测错误以及传输是否完成。
- 使用
WriteFile
将这些字节写入本地文件。
- Calculate/Update你的进度信息。
- 如果文件未完全下载且没有错误,请返回第 4 步。
- 使用
CloseHandle
关闭本地文件。
- 使用
InternetCloseHandle
关闭远程文件。
如果您需要更多帮助,我可以提供一些执行此操作的代码...
我正在创建一个从 FTP 服务器下载文件的程序。我想显示用户下载了多少字节的进度。我曾尝试搜索它,但找不到任何东西。首先,我的计划是使用 fstream 获取文件大小,但后来我意识到我不能同时共享 2 个进程。
我假设您正在使用 FtpGetFile(..)
从 FTP 服务器下载文件。这是下载文件的简单方法,它不会向您提供有关已下载多少字节的信息,并且您几乎无法控制该功能的行为方式(例如,根据用户请求取消下载?)。不过,对于快速测试,它非常有帮助。
为了监控下载进度,请执行以下操作:
- 使用
FtpFindFirstFile
确定远程文件的大小。 - 使用
FtpOpenFile
打开远程文件。 - 使用
CreateFile
创建本地文件。 - 使用
InternetReadFile
从远程文件中读取一些字节。 - 评估 return 的值和错误代码
InternetReadFile
检测错误以及传输是否完成。 - 使用
WriteFile
将这些字节写入本地文件。 - Calculate/Update你的进度信息。
- 如果文件未完全下载且没有错误,请返回第 4 步。
- 使用
CloseHandle
关闭本地文件。 - 使用
InternetCloseHandle
关闭远程文件。
如果您需要更多帮助,我可以提供一些执行此操作的代码...