wininet 问题

s446721902 2010-01-11 02:54:26
用wininet,InternetReadFile读下来的xml如果我用缓冲区读,

WriteFile(createfile,buffer,sizeof(buffer),&written,NULL);

后得到的xml是格式有问题的,用

XML::IXMLDOMDocumentPtr xmlDoc(__uuidof(XML::DOMDocument));
xmlDoc->load((_variant_t)xmlname1);

读取就会出错。只有一个一个字符读取下来才没问题
请问这个有解决办法吗
...全文
99 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
s446721902 2010-01-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xixiaoliu 的回复:]
WriteFile 的第三个参数给 bytes_read,不要 sizeof(buffer),不一定每次都会读满
同时比较一下两种结果,,

[/Quote]
看来是我想当然了,谢谢 溪小流
xixiaoliu 2010-01-11
  • 打赏
  • 举报
回复
WriteFile 的第三个参数给 bytes_read,不要 sizeof(buffer),不一定每次都会读满
同时比较一下两种结果,,
s446721902 2010-01-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xixiaoliu 的回复:]
你说的两种分别贴代码,特别是
WriteFile(createfile,buffer,sizeof(buffer),&written,NULL);
[/Quote]
单个的,可以实现的

const int buflen = 1;
char buffer[buflen]; //下载文件的缓冲区
while(1)
{
memset(buffer,0,buflen);
b= InternetReadFile(file_handle, buffer, buflen, &bytes_read);
write_buffer++;
if(!b)
throw "InternetReadFile error!";
if(bytes_read==0)
break;
hwrite=WriteFile(createfile,buffer,sizeof(buffer),&written,NULL);
}


缓冲区的,无法实现的

const int buflen = 100;
char buffer[buflen]; //下载文件的缓冲区
while(1)
{
memset(buffer,0,buflen);
b= InternetReadFile(file_handle, buffer, buflen, &bytes_read);
write_buffer++;
if(!b)
throw "InternetReadFile error!";
if(bytes_read==0)
break;
hwrite=WriteFile(createfile,buffer,sizeof(buffer),&written,NULL);
}

就是缓冲区长度 buflen 不同而已
xixiaoliu 2010-01-11
  • 打赏
  • 举报
回复
你说的两种分别贴代码,特别是
WriteFile(createfile,buffer,sizeof(buffer),&written,NULL);

64,662

社区成员

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

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