#include <afx.h>
#include <afxinet.h>
#define RECVPACK_SIZE 2048
bool DownloadSaveFiles(char* url,char *strSaveFile) {//下载文件并保存为新文件名
bool ret=false;
CInternetSession Sess("lpload");
Sess.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT , 2000); //2秒的连接超时
Sess.SetOption(INTERNET_OPTION_SEND_TIMEOUT , 2000); //2秒的发送超时
Sess.SetOption(INTERNET_OPTION_RECEIVE_TIMEOUT , 2000); //2秒的接收超时
Sess.SetOption(INTERNET_OPTION_DATA_SEND_TIMEOUT , 2000); //2秒的发送超时
Sess.SetOption(INTERNET_OPTION_DATA_RECEIVE_TIMEOUT, 2000); //2秒的接收超时
DWORD dwFlag = INTERNET_FLAG_TRANSFER_BINARY|INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_RELOAD ; CHttpFile* cFile = NULL;
char *pBuf = NULL;
int nBufLen = 0 ;
do {
try{
cFile = (CHttpFile*)Sess.OpenURL(url,1,dwFlag);
DWORD dwStatusCode;
cFile->QueryInfoStatusCode(dwStatusCode);
if (dwStatusCode == HTTP_STATUS_OK) {
//查询文件长度
DWORD nLen=0;
cFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH, nLen);
//CString strFilename = GetFileName(url,TRUE);
nBufLen=nLen;
if (nLen <= 0) break;// //分配接收数据缓存
pBuf = (char*)malloc(nLen+8);
ZeroMemory(pBuf,nLen+8); char *p=pBuf;
while (nLen>0) {
//每次下载8K
int n = cFile->Read(p,(nLen<RECVPACK_SIZE)?nLen:RECVPACK_SIZE);
//接收完成退出循环
if (n <= 0) break;//
//接收缓存后移
p+= n ;
//剩余长度递减
nLen -= n ;
} //如果未接收完中断退出
if (nLen != 0) break; //接收成功保存到文件 CFile file(strSaveFile, CFile::modeCreate | CFile::modeWrite);
file.Write(pBuf,nBufLen);
file.Close();
ret = true;
}
} catch(...) {
break;//
}
} while(0); //释放缓存
if (pBuf) {
free(pBuf);
pBuf=NULL;
nBufLen = 0 ;
} //关闭下载连接
if (cFile) {
cFile->Close();
Sess.Close();
delete cFile;
}
return ret;
}
int main() {
DownloadSaveFiles("http://www.nirsoft.net/utils/nircmd.zip","d:\\cppdld_nircmd.zip");
return 0;
}

http://bbs.csdn.net/topics/390052882

最新文章

  1. JS判断网页是否在微信中打开/
  2. LNMP环境搭建
  3. centos安装
  4. House Robber II
  5. FOR XML PATH 应用及其反向分解
  6. junit测试用例加载spring配置文件
  7. ruby on rails创建的页面訪问很慢
  8. C#实现对mongoDB的简单增删查改
  9. pandas数据结构练习题(部分)
  10. Python在终端通过pip安装好包以后,在Pycharm中依然无法使用的解决办法
  11. java-js知识库之一——canvas绘制9*9乘法表
  12. gentoo 建立本地软件库并安装软件 Custom repository
  13. 八、Kafka总结
  14. iOS 11开发教程(八)定制iOS11应用程序图标
  15. dubbo的一些默认变量
  16. python 银行系统
  17. BZOJ 4566 JZYZOJ 1547 [haoi2016T5]找相同子串 后缀数组 并查集
  18. 1、Android项目框架搭建 (分析需求、整理资料)
  19. 1249 Problem Q
  20. [置顶] docker web-GUI DockerUI和Shipyard对比

热门文章

  1. Mac下安装Fiddler抓包工具(别试了,会报错,没办法使用)
  2. Orleans框架------基于Actor模型生成分布式Id
  3. (转)CentOS 7 下 MySQL 5.7 配置 Percona Xtrabackup
  4. 利用编辑器漏洞ewebeditor-fckeditor-southidceditor
  5. python 四种单例模式
  6. cors允许的方法和contype-type
  7. Jquery 在多个相同标签click的问题
  8. Linux防火墙简介 – iptables配置策略
  9. table 中的tr 行点击 变换颜色背景
  10. Spring MVC 实现Excel的导入导出功能(1:Excel的导入)