资源简介
自己用c++ 封装的 http下载类,功能很详细,最主要的功能就是可以实现下载并写入文件。
代码片段和文件信息
#include “CDownloadCTL.h“
DownloadCTL::DownloadCTL(void)
{
}
DownloadCTL::~DownloadCTL(void)
{
}
string DownloadCTL::m_sSoftURL=““;
string DownloadCTL::m_sUnZipDirName=““;
string DownloadCTL::m_sZipFileName=““;
char g_szPath[MAX_PATH]={0};
BOOL DownloadCTL::GetSoftVersionFromSrv( char* urlstring&res )
{
string strRES;
WriteToString(urlstrRES);
int i = 0;
if(!AnalyzeDataByLabel(“““ “strRESres)
||
!AnalyzeDataByLabel(“““ “strRESm_sSoftURL))
{
//MessageBox(“版本数据标签解析出现错误“);
return FALSE;
}
//zip升级包的名字写入ini文件,解压时会用
int ls = m_sSoftURL.find_last_of(“\/“);
m_sZipFileName = m_sSoftURL.substr(ls+1);
//把“.zip去掉就是解压路径,保持起来
int pi = m_sZipFileName.find(“.“);
m_sUnZipDirName = m_sZipFileName.substr(0pi);
//
char verLocal[MAX_PATH]={0};
sprintf(verLocal“%s\\Version.ini“g_szPath);
WritePrivateProfileString(“VersionCRL““URL“m_sZipFileName.c_str()verLocal);
return TRUE;
}
BOOL DownloadCTL::AnalyzeDataByLabel(char*labelSchar*labelEstring sourcestring&con)
{
string::size_type s = source.find(labelS);
string::size_type e = source.find(labelE);
if (s == source.npos|| e == source.npos || s>=e )
return FALSE;
//提取内容
size_t le = strlen(labelS);
size_t co = e - s - le;
con = source.substr(s+leco);
return TRUE;
}
BOOL DownloadCTL::WriteToString(char*urlstring&res )
{
HINTERNET internetOpen = InternetOpen(“Internet Explorer“ INTERNET_OPEN_TYPE_DIRECT NULL NULL 0);
if (internetOpen == NULL)
return FALSE;
//请求URL加上时间戳,以防缓存
string urlstr = url;
char t[20]={0};
sprintf(t “?t=%d“ time(0));
urlstr+=t;
//打开连接
HINTERNET internetOpenUrl = InternetOpenUrl(internetOpen urlstr.c_str() NULL 0 INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_PRAGMA_NOCACHE 0);
if (internetOpenUrl == NULL)
{
InternetCloseHandle(internetOpen);
return FALSE;
}
//检查状态码
DWORD dwStatusCode;
DWORD dwStatusSize = sizeof(dwStatusCode);
HttpQueryInfo(internetOpenUrl HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER &dwStatusCode &dwStatusSize NULL);
if (dwStatusCode!=200)
{
InternetCloseHandle(internetOpenUrl);
InternetCloseHandle(internetOpen);
return FALSE;
}
//获取接收数据大小
DWORD dwLengthSize = sizeof(m_iSize);
HttpQueryInfo(internetOpenUrl HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER &m_iSize &dwLengthSize NULL);
if (m_iSize < 0)
{
InternetCloseHandle(internetOpenUrl);
InternetCloseHandle(internetOpen);
return FALSE;
}
//执行读取数据
BOOL internetReadFile;
char buffer[BUFF_SIZE];
memset(buffer 0 sizeof(buffer));
DWORD byteRead = 0;
if (internetOpenUrl != NULL)
{
while (true)
{
InternetReadFile(internetOpenUrl buffer sizeof(buffer) &byteRead);
if (byteRead == 0)
break;
res+=buffer;
}
}
//下载完毕关闭连接
InternetCloseHandle(internetOpenUrl);
InternetCloseHandle(internetOpen);
return TRUE;
}
B
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1014 2014-06-24 14:04 CDownloadCTL.h
文件 6279 2014-06-24 11:43 CDownloadCTL.cpp
----------- --------- ---------- ----- ----
7293 2
- 上一篇:c++ http并保存到本地
- 下一篇:马踏棋盘算法的程序设计
相关资源
- c++ http并保存到本地
- C++ HTTP GET,POST的简单
- 数据压缩LZW编码c++程序
- 数据压缩 算术编码 c++ 程序
- C/C++/STL帮助手册 chm完整离线版
- ECC算法 C++实现 加解密
- 高斯投影正算C++源代码
- C++课程设计——学生学籍管理系统
- 清华大学C++内部题库 绝对好题
- VC++ MFC的餐厅点餐系统
- 用c++解决金刚坐飞机问题
- C++景区旅游信息管理系统
- 文件同步与异步读写
- hiredis的c++封装, 线程安全
- C++实现Apriori算法,频繁模式数据挖掘
- C++获取windows系统服务
- 矩阵算法相关代码
- 点扩散函数PSF
- 潮流计算 高斯赛德尔法
- RPP算法-RobustPlanarPose-C++
- PnP solvers C++版本,包括P3Pf,Epnp等
- 道格拉斯算法C++实现
- c++获取cpu使用率包含系统和单进程
- C++封装的一个跨平台的线程类和锁类
- C++信号量实现互斥爸爸女儿儿子苹果
- grpc c++
- 学生成绩管理系统(MFC)
- C++开源日志库Easylogging++ V9.80版本源码
- ArcGis Engine C++ 开发教程
- Visual C++游戏编程基础 PDF+源码
评论
共有 条评论