資源簡介
自己用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并保存到本地
- 下一篇:馬踏棋盤算法的程序設計
評論
共有 條評論