65,211
社区成员
发帖
与我相关
我的任务
分享
//****************************************************************************************//
//函数 CDoUpdateDlg::DownFile
//主要功能:
//参数列表:
// 1、CString strUrl:是文件的URL地址
// 2、strFile:文件名
// 3、CString strPath:是存放到本地的路径
//返回值:
//备注:
//****************************************************************************************//
bool DownFile(CString strUrl, CString strFile, CString strPath)
{
m_nCurFileSize = 0;
bool bRet = false;
CString strSentence;
CInternetSession sess;//Create session
CHttpFile* fileGet;
CException* e;
TRY
{
fileGet=(CHttpFile*)sess.OpenURL(strUrl);//Open file
}
CATCH_ALL(e)
{
fileGet = 0;
return false;
}
END_CATCH_ALL
DWORD dwStatus;
DWORD dwBuffLen = sizeof(dwStatus);
if(fileGet)
{
BOOL bSuccess = fileGet->QueryInfo(
HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER,
&dwStatus, &dwBuffLen);
m_nCurFilePos = 0;
char buffer[1024 * 4 1];
unsigned long nSize = 1024 * 4;
int n = 0;
if( bSuccess && dwStatus >= 200 && dwStatus < 300 )
{
fileGet->QueryInfo(HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER, &dwStatus, &dwBuffLen);
m_nCurFileSize = dwStatus;
char szFileName[1024];
GetAppPath(szFileName, 1024);
strcpy(szFileName, strPath);
strcat(szFileName, strFile);
FILE *f;
f = fopen(szFileName, "wb");
if(f == NULL)
{
fileGet->Close();
delete fileGet;
return false;
}
if(m_nCurFileSize < nSize)
nSize = m_nCurFileSize;
int nCount = fileGet->Read(buffer, nSize);
unsigned long nDownLen = 0;
while(nCount > 0)
{
nDownLen = nCount;
m_nCurFilePos = nCount;
CDC *pDC = GetDC();
DrawDownProcess(pDC);
ReleaseDC(pDC);
fwrite(buffer, sizeof(char), nCount, f);
nCount = fileGet->Read(buffer, nSize);
}
fclose(f);
if(m_nCurFileSize > nDownLen)
bRet = false;
else
bRet = true;
}
fileGet->Close();
delete fileGet;
}
else
{
TRACE0("对不起,连接超时,无法打开站点!");
bRet = false;
}
sess.Close();
return bRet;
}