wininet提供了接口ftpgetfile实现从ftp服务器下载文件;提供了接口ftpputfile实现把文件上传到ftp服务器上。通过这两个接口,我们能够完成基本的ftp文件传输客户端功能。但是在传输的同时,我们希望知道当前大概传输了多少,传输完整个文件大概需要多长时间,当前进度是多少,大概还有多长时间才能传输完毕。
单纯依靠这两个接口,我们无法实现这个功能。仔细翻阅msdn,发现wininet还提供了这样一个接口:internetsetstatuscallback。该函数就是设置文件传输的回调函数,其原型如下:
internet_status_callback internetsetstatuscallback(
hinternet hinternet, internet_status_callback lpfninternetcallback); 该接口为internet会话设置一个状态回调函数:lpfninternetcallback,该回调函数的原型声明如下:
void callback internetstatuscallback(
hinternet hinternet, dword_ptr dwcontext, dword dwinternetstatus, lpvoid lpvstatusinformation, dword dwstatusinformationlength); 通过这个回调函数,我们可以实现对当前传输进度的控制:可以统计出到目前已经传输了多少字节,并且计算出传输速率,从而可以得知大概还剩下多少时间。