思路很清晰,使用CInternetSession创建CHttpFile对象。然后对该对象获取文件信息、进行文件读写操作均可。

void DownloadFile(LPCTSTR szURL, LPCTSTR szFile) //szURL 表示网页地址 szFile 表示保存本地的路径(及要保存的文件名) 感谢网友oceansoft http://blog.chinaunix.net/uid-7718934-id-2564609.html分享
{
DWORD dwFlag =                  //设置读取的方式
INTERNET_FLAG_TRANSFER_BINARY |
INTERNET_FLAG_DONT_CACHE |
INTERNET_FLAG_RELOAD; CInternetSession cis;
CHttpFile* pFile = (CHttpFile*)cis.OpenURL(szURL, , dwFlag); //创建CHttpFile对象
if(pFile)
{
DWORD dwStatusCode;
pFile->QueryInfoStatusCode(dwStatusCode); //获得HTTP响应请求的状态
CString dwFileLength;//这段代码是自己测试使用,获取请求文件的大小,单位是kb
     pFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH,dwFileLength);
int length = atoi(dwFileLength)/;
if(dwStatusCode == ) //200 表示 网页地址正常响应
{
CString str;
CFile cf; //创建CFile对象
if(!cf.Open(szFile, CFile::modeWrite|CFile::modeCreate)) //该目录是否有权限打开,如果打开失败就直接返回
return;
char lpBuf[];//每次读取文件的大小 为4kb
UINT dwRead = , dwFileLen = ;
do
{
dwRead = pFile->Read(lpBuf, sizeof(lpBuf)); //每次读取 4096 B = 1024 * 4 B = 4kb的内容 dwRead 为实际读写的大小
if(dwRead > )
{
cf.Write(lpBuf, dwRead); //写入文件
dwFileLen += dwRead; //dwFileLen表示实际下载的大小
}
}while(dwRead > );
cf.Close(); //关闭打开的资源
} pFile->Close();
delete pFile;
}
}
OpenURL函数原型如下:
CStdioFile* OpenURL(
LPCTSTR pstrURL, //下载的地址
DWORD_PTR dwContext = 1, //An application-defined value passed with the returned handle in callback. (具体是啥,还不用过,翻译就是在回调时返回的自定义值,英语各种水,就用它默认的值1)
DWORD dwFlags = INTERNET_FLAG_TRANSFER_ASCII, //设置传输的方式有很多 具体见 http://msdn.microsoft.com/zh-cn/library/d25ew7sy(v=VS.80).aspx
LPCTSTR pstrHeaders = NULL,
DWORD dwHeadersLength = 0
);
返回值有很多类型使用强制转换就可以了,我们使用的是CHttpFile
URL type Returns

file://

CStdioFile*

http://

CHttpFile*

gopher://

CGopherFile*

ftp://

CInternetFile*

测试的函数调用为DownloadFile("http://dldir1.qq.com/qqfile/qq/QQ2013/QQ2013SP6/9305/QQ2013SP6.exe", "E:\\程序\\C++测试\\tttt\\tttt\\QQ2013SP6.exe");

使用CInternetSession CHttpFile下载网页链接地址的文件的更多相关文章

  1. Linux 下载包链接地址

    Linux包下载链接地址: http://mirrors.sohu.com http://mirrors.163.com/

  2. Python入门小练习 002 批量下载网页链接中的图片

    我们常常需要下载网页上很多喜欢的图片,但是面对几十甚至上百张的图片,一个一个去另存为肯定是个很差的体验. 我们可以用urllib包获取html的源码,再以正则表达式把匹配的图片链接放入一个list中, ...

  3. 利用backgroundwork----递归读取网页源代码,并下载href链接中的文件

    今天闲着没事,研究了一下在线更新程序版本的问题.也是工作中的需要,开始不知道如何下手,各种百度也没有找到自己想要的,因为我的需求比较简单,所以就自己琢磨了一下.讲讲我的需求吧.自己在IIs上发布了一个 ...

  4. nodejs 下载网页及相关资源文件

    功能其实很见简单,通过 phantomjs.exe 采集 url 加载的资源,通过子进程的方式,启动nodejs 加载所有的资源,对于css的资源,匹配css内容,下载里面的url资源 当然功能还是很 ...

  5. 怎样下载网页中的js文件?

    1.按下F12,会看到调试的界面,如下图所示,先点击最上面的Resources选项,Frames--(你想下载的网址)--Script,下面就是全部的js文件啦,网站的图片啊什么的都可以下载了.

  6. paip.点击每个网页链接都提示下载的解决。

    paip.点击每个网页链接都提示下载的解决.   作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn. ...

  7. 怎么找到苹果App Store的应用程序下载链接地址

    http://jingyan.baidu.com/article/6dad5075f6fa79a123e36e85.html 怎么找到苹果App Store的应用程序下载链接地址 每个上传到苹果app ...

  8. MAC系统网页链接如何下载

    Folx 5 是一款简单易用.功能强大的Mac OS系统的下载管理器.Folx界面简洁,下载管理方便,支持网页链接下载.BT下载和YouTube下载,而且还可以设置计划任务.搜索BT种子以及添加Tra ...

  9. Python 爬虫5——爬取并下载网页指定规格的图片

    看完上篇文档之后,我们对于正则表达式已经有了基本的了解,其实学习最有效的办法就是带着问题和目的,这里我们假设有一个目标:获取某个网页上指定规格的图片的链接地址,并下载到本地. 一.实现步骤: 1.在浏 ...

随机推荐

  1. 死锁相关 变量 与 PURGE 线程停止

    http://www.tuicool.com/articles/NzAFZn https://github.com/percona/percona-server/pull/83/commits/091 ...

  2. 云服务器 ECS Linux 修改编码格式

    https://help.aliyun.com/knowledge_detail/41424.html?spm=5176.7841174.2.19.Le8kvy 通常情况下,云服务器 ECS Linu ...

  3. Linux合并文件、去除重复行的命令

    Linux合并文件命令: awk '{printf("%s\n",$0)}' YQ-*101?.txt >  123.txt   linux去除重复行命令:cat YQ-10 ...

  4. 判断null

    var tmp = this.pullDown.getValue();   if(!tmp && typeof(tmp)!="undefined" &&am ...

  5. 一步一步实现iOS微信自动抢红包

    微信红包 前言:最近笔者在研究iOS逆向工程,顺便拿微信来练手,在非越狱手机上实现了微信自动抢红包的功能.   此教程所需要的工具/文件 yololib class-dump dumpdecrypte ...

  6. iOS缓存框架-PINCache解读

    文/Amin706(简书作者)原文链接:http://www.jianshu.com/p/4df5aad0cbd4著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 在项目中总是需要缓存一 ...

  7. C++ atol

    函数名: atol 功 能: 把字符串转换成长整型数 用 法: long atol(const char *nptr);   简介编辑 相关函数: atof,atoi,strtod,strtol,st ...

  8. oracle数据库常用SQL语句

    1)删除表的一列 ALTER TABLE 表名 DROP COLUMN 列名; 2)增加表的一列 且默认值为0 alter table 表名 add 字段名 类型 default '0'; 3)修改表 ...

  9. a letter and a number

    描述we define f(A) = 1, f(a) = -1, f(B) = 2, f(b) = -2, ... f(Z) = 26, f(z) = -26;Give you a letter x ...

  10. 标签云 - jqcloud 用法

    html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...