关于VC实现资源下载的问题

yeching 2009-02-20 08:08:30
有一个资源地址,如http://www.dd1314.com/dingdingyinyue/20065532148361.mp3,
如何用C++实现 将该资源下载下来?
...全文
83 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
waizqfor 2009-02-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 yeching 的帖子:]
有一个资源地址,如http://www.dd1314.com/dingdingyinyue/20065532148361.mp3,
如何用C++实现 将该资源下载下来?
[/Quote]
其实就是Http下载文件 通过协议来看就可以了
或者是TCP那种的SOCKET文件传输

//****************************************************************************************//

//函数 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;
}

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧