使用CInternetSession CHttpFile下载网页链接地址的文件
思路很清晰,使用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下载网页链接地址的文件的更多相关文章
- Linux 下载包链接地址
Linux包下载链接地址: http://mirrors.sohu.com http://mirrors.163.com/
- Python入门小练习 002 批量下载网页链接中的图片
我们常常需要下载网页上很多喜欢的图片,但是面对几十甚至上百张的图片,一个一个去另存为肯定是个很差的体验. 我们可以用urllib包获取html的源码,再以正则表达式把匹配的图片链接放入一个list中, ...
- 利用backgroundwork----递归读取网页源代码,并下载href链接中的文件
今天闲着没事,研究了一下在线更新程序版本的问题.也是工作中的需要,开始不知道如何下手,各种百度也没有找到自己想要的,因为我的需求比较简单,所以就自己琢磨了一下.讲讲我的需求吧.自己在IIs上发布了一个 ...
- nodejs 下载网页及相关资源文件
功能其实很见简单,通过 phantomjs.exe 采集 url 加载的资源,通过子进程的方式,启动nodejs 加载所有的资源,对于css的资源,匹配css内容,下载里面的url资源 当然功能还是很 ...
- 怎样下载网页中的js文件?
1.按下F12,会看到调试的界面,如下图所示,先点击最上面的Resources选项,Frames--(你想下载的网址)--Script,下面就是全部的js文件啦,网站的图片啊什么的都可以下载了.
- paip.点击每个网页链接都提示下载的解决。
paip.点击每个网页链接都提示下载的解决. 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn. ...
- 怎么找到苹果App Store的应用程序下载链接地址
http://jingyan.baidu.com/article/6dad5075f6fa79a123e36e85.html 怎么找到苹果App Store的应用程序下载链接地址 每个上传到苹果app ...
- MAC系统网页链接如何下载
Folx 5 是一款简单易用.功能强大的Mac OS系统的下载管理器.Folx界面简洁,下载管理方便,支持网页链接下载.BT下载和YouTube下载,而且还可以设置计划任务.搜索BT种子以及添加Tra ...
- Python 爬虫5——爬取并下载网页指定规格的图片
看完上篇文档之后,我们对于正则表达式已经有了基本的了解,其实学习最有效的办法就是带着问题和目的,这里我们假设有一个目标:获取某个网页上指定规格的图片的链接地址,并下载到本地. 一.实现步骤: 1.在浏 ...
随机推荐
- javascript complete, onload
1.complete 属性可返回浏览器是否已完成对图像的加载 <html> <head> <script type="text/javascript" ...
- innobackupex 恢复实验
[root@localhost backup]# pwd /backup [root@localhost backup]# ll 总用量 drwxr root root Jul : basebacku ...
- mysql博客
http://blog.csdn.net/mchdba/article/details/9190771 本帖最后由 mchdba 于 2014-2-10 17:15 编辑 公司招聘MySQL DBA, ...
- 关于解决 The processing instruction target matching "[xX][mM][lL]" is not allowed
在处理和保存XML文件时,出现The processing instruction target matching "[xX][mM][lL]" is not allowed 错误 ...
- WPF之复杂形状控件
有的时候想将一张图片变成一个按钮.当然这里不是单纯讲图片作为按钮的背景. 这两者是有区别的: 前者图片即按钮,比如你有一个空心的圆圈,当你点击中间空心部分的时候是没有任何反应的因为它不是属于按钮的一部 ...
- dp与px之间的转换
代码如下: package com.example.fxvideo.utils; import android.content.Context; public class DensityUtils { ...
- UVa OJ 10300
Problem A Ecological Premium Input: standard input Output: standard output Time Limit: 1 second Memo ...
- 在ios开发中nil和NUll和Nilde区别————和如何判断连个对象的关系和UISlider不能拖动的问题
nil表示一个对象指针为空,针对对象 >示例代码: NSString *someString = nil; NSURL *someURL = nil; id someObject = nil; ...
- iOS 关于NSString的一些方法
在项目中整理的一些关于字符串应用方法,可以全部封装在一个类里面进行调用,会不断更新添加: 1.数字转换成对应的中文数字(项目中课程分级目录的章节号用到) 摘自:http://blog.csdn.net ...
- Java学习笔记——显示当前日期的三种方式
一.Date类:这是一种过时的表达方式 import java.util.Date; Date date = new Date(); System.out.println((1900+date.get ...