首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Windows Mobile >

Windows Mobile 5.0 下有什么现成的封装好的 HTTP 下载的源码吗?解决方案

2012-01-23 
Windows Mobile 5.0 下有什么现成的封装好的 HTTP 下载的源码吗?目前看简单的话只有用 URLDownloadToFile,

Windows Mobile 5.0 下有什么现成的封装好的 HTTP 下载的源码吗?
目前看简单的话只有用 URLDownloadToFile,有没有现成的源码可以用啊?

[解决办法]
void CTestWebBrowerView::OnTestdownload()
{
// TODO: 在此添加命令处理程序代码
CString szFileName("test.zip");
CString szUrl("http://127.0.0.1/test/test.zip");//HTTP文件
long nDownLoad = 0;
CFile file;
HANDLE hFind;
WIN32_FIND_DATA FindFileData;

hFind=FindFirstFile(szFileName , &FindFileData);
if (hFind != INVALID_HANDLE_VALUE) 
{
//查找到这个文件

if(file.Open(szFileName,CFile::modeRead))
{
nDownLoad = (long)file.GetLength();//如果文件存在,得到文件大小
file.Close();
}
else
{
return;
}
}
//if (!AfxSocketInit())
//{
////AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
//return ;
//}
HINTERNET hNet = ::InternetOpen(L"MSDN SurfBear",
INTERNET_OPEN_TYPE_DIRECT,//INTERNET_OPEN_TYPE_DIRECT,PRE_CONFIG_INTERNET_ACCESS,
NULL,
NULL,
0) ;//初始化调用WINNET文件
if(hNet==NULL)
{
::InternetCloseHandle(hNet) ;
return ;
}
HINTERNET hUrlFile = NULL;
int nReTry = 0;
while(hUrlFile == NULL && nReTry < 5)//打开服务器上文件,如果连接失败,边续连接五次,如果都失败,则无法连接
{
hUrlFile = ::InternetOpenUrl(hNet,
szUrl,
NULL,
0,
INTERNET_FLAG_RELOAD,
0) ;
if(hUrlFile)
break;
//int n = ::GetLastError();
Sleep(1000);
nReTry ++;
}

if(hUrlFile==NULL)
{
::InternetCloseHandle(hUrlFile) ;

::InternetCloseHandle(hNet) ;
return ;
}

DWORDdwByteToRead=0;
DWORDdwSizeOfRq=4;
int m_dwFileSize = 0;

//得到文件大小
if(!HttpQueryInfo(hUrlFile,HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER,&dwByteToRead,&dwSizeOfRq,NULL))
{
dwByteToRead=0;
::InternetCloseHandle(hUrlFile) ;
::InternetCloseHandle(hNet) ;
}
else
{
m_dwFileSize=dwByteToRead;
}
//得到文件最后更新时间
SYSTEMTIMEdwByteToRead1;
DWORDdwSizeOfRq1=sizeof(SYSTEMTIME);
if(!HttpQueryInfo(hUrlFile,HTTP_QUERY_LAST_MODIFIED | HTTP_QUERY_FLAG_SYSTEMTIME,(LPVOID)&dwByteToRead1,&dwSizeOfRq1,NULL))
{
SYSTEMTIME st = (SYSTEMTIME)dwByteToRead1;
}

if(!InternetSetFilePointer(hUrlFile,nDownLoad,NULL,FILE_CURRENT,0))
{
return;
::InternetCloseHandle(hUrlFile) ;
::InternetCloseHandle(hNet) ;
}

DWORD dwBytesRead = 0;
BOOL bRead = true;
//是以创建追加写的方式打开文件,如果没有创建文件,如果有追加文件
if ( file.Open( szFileName, CFile::modeCreate| CFile::modeWrite | CFile::modeNoTruncate) )
{
file.SeekToEnd();//定位到文件末尾
char buffer[1024];
dwBytesRead = sizeof(buffer);

//从服务器读取文件,每次读取1024个字节,直到结尾。
while(bRead && (dwBytesRead == sizeof(buffer)))
{
bRead = ::InternetReadFile(hUrlFile,
buffer,
sizeof(buffer),
&dwBytesRead);
file.Write(buffer,dwBytesRead);//写本地文件
}
file.Close();
}
::MessageBox(NULL,L"download over",L"info",MB_OK);

::InternetCloseHandle(hUrlFile) ; //关闭连接句柄
::InternetCloseHandle(hNet) ;//关闭初始化名柄
if(!bRead)
return ;
}

热点排行