• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: C/C++
  • 标签: c++  http  下载  

资源简介

自己用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


评论

共有 条评论