网络文件下载的问题 HttpQueryInfo?

liln0530 2012-05-16 06:00:51

DWORD byteread=0;
char buffer[65535];
memset(buffer,0,sizeof(buffer));
HINTERNET internetopen;

internetopen=InternetOpen(L"Testing",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
if (internetopen==NULL)
{
return FALSE;
}

HINTERNET internetopenurl;
CString strURLPath = L"http://www.xatuxun.com//update//Resource//BKGround//elthumbs.db";
internetopenurl=InternetOpenUrl(internetopen, strURLPath, NULL,0,INTERNET_FLAG_RELOAD,0);
if (internetopenurl==NULL)
{
goto there;
}

//计算文件总大小
DWORD dwByteToRead = 0;
DWORD dwSizeOfRq = 4;

if (!HttpQueryInfo(internetopenurl, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, (LPVOID)&dwByteToRead, &dwSizeOfRq, NULL))// ---------------- 这里得到的文件大小不对(1090560字节)。
{
return FALSE;
}
...全文
122 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
尘雨 2012-05-21
  • 打赏
  • 举报
回复
if (!HttpQueryInfo(internetopenurl, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, (LPVOID)&dwByteToRead, &dwSizeOfRq, NULL))
{

呵呵,你使用方法不对
BOOL WINAPI HttpQueryInfo(
HINTERNET hRequest,
DWORD dwInfoLevel,
LPVOID lpBuffer,
LPDWORD lpdwBufferLength,
LPDWORD lpdwIndex
);

第三个参数,应该是lpBuffer,通常是用于保存返回的字符串,如果第二个参数是HTTP_QUERY_CONTENT_LENGTH

那么这个lpBuffer记录的就是个字符串,字符串内容是文件大小。

第三个参数,你给的是一个DWORD类型的指针。当然是不正确的。你应该用buffer,然后TRACE这个buffer内容
liln0530 2012-05-21
  • 打赏
  • 举报
回复
我下载exe和txt文件都是可以的,就是DB文件不行,是不是后缀格式有什么特别的API不支持
Eleven 2012-05-19
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20070429/21/b06c1cbd-fb9e-4ab4-bba2-a428443a78dc.html
fishion 2012-05-19
  • 打赏
  • 举报
回复
看你用的是MFC吧,可以用CInternetSession,CHttpFile下载文件,调用GetLength
得到文件长度

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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