CE5.0下http下载文件

liuwy   2010-1-27 14:39 楼主
大家好,我要实现如下功能:从服务器上下载一个二进制文件到CE5.0系统的本地目录,尝试用InternetOpen、InternetOpenurl、Internetreadfile读取文件,我使用了一个循环;
readbyte = 1;
where (readbyte > 0)
{
    BOOL b = InternetReadFile(handle2,Temp,1000,&readbyte); //每次读取1000字节
    fwrite(Temp,  sizeof  ( byte ), readbyte, file);
}
第一次循环没有问题,读到了1000字节,readbyte被设置为1000,返回值b为true;
第二次循环只读到了800字节,readbyte被设置为0,返回值为false;

而这个文件的真实大小应该是10K左右;

我也有想过将1000改成10K,这样应该可以直接读完整个文件;可实际上,在Temp中只有1500个字节的内容,而且
readbyte也没有正确返回1500,而是0;

请问这是什么原因?

或者大家给我一些新的实现方案的建议也行!我还有试过:
CString strURL;

        WCHAR filename[260];
        wcscpy(filename , L"\\test.jpg");
        //strI.Format("%d",i);
        strURL="http://127.0.0.1:8080/test/test.jpg";
        if(::URLDownloadToFile(NULL,strURL,filename,0,NULL) ==E_OUTOFMEMORY)       
        {
                MessageBox(L"测试成功!");
        }
        else
                MessageBox(L"测试不成功!");

总是返回不成功!


谢谢大家!

回复评论 (24)

补充:
使用if(::URLDownloadToFile(NULL,strURL,filename,0,NULL) ==S_OK)
{
MessageBox(L"测试成功!");
}
else
MessageBox(L"测试不成功!");

也是返回测试不成功!!

点赞  2010-1-27 14:44
帮顶下。

MARK.
点赞  2010-1-27 15:01
URLDownloadToFile 返回的错误代码是什么?
点赞  2010-1-27 15:03
strURL="http://127.0.0.1:8080/test/test.jpg"; 改成
strURL=_T("http://127.0.0.1:8080/test/test.jpg");试试
点赞  2010-1-27 15:04
谢谢楼上:我用getlasterror()得到返回值是997,再用错误查找工具看了下,997的意思是:重叠 I/O 操作在进行中。
点赞  2010-1-27 15:10
重叠 I/O 操作在进行中。
这个我查了下,说不是一个错误!可是我不知道下面要具体怎么处理?
期待“骨灰”出现,帮忙看下下面怎么做!!
点赞  2010-1-27 15:24
google一下,先自己看看嘛!

我也想知道怎么处理!!
点赞  2010-1-27 15:52
怎么没有帮忙??
点赞  2010-1-27 15:54
重叠I\O的问题解决了,但urldownloadtofile()下载还是不成功;代码如下:
         CString strURL;

        WCHAR modulefile[260];

        GetModuleFileName(NULL, modulefile, 260);

       
        WCHAR * p = wcsrchr(modulefile, L'\\');

        *p = L'\0';

        WCHAR filename[260];

        wcscpy(filename,modulefile);
        wcscat(filename , L"\\test.jpg");
        strURL = "http://127.0.0.1:8080/test/test.jpg";
        HRESULT   urldown;

        urldown = ::URLDownloadToFile(NULL,strURL,filename,0,NULL);

        Sleep(10000);

        //GetOverlappedResult()
       
        DWORD dww = GetLastError();

        if( urldown ==S_OK)       
        {
                MessageBox(L"测试成功!");
        }
        else
                MessageBox(L"测试不成功!");
}

dww的值为2,
也就是:系统找不到指定的文件。
可是那个url   http://127.0.0.1:8080/test/test.jpg,我把它到ie里它能正确显示这张图
点赞  2010-1-27 16:45
用OpenURL方法试试
给个例子你参考下

  1.         CInternetSession* mySession = new CInternetSession(_T("http://www.ip138.com/ip2city.asp"), 1, INTERNET_OPEN_TYPE_PRECONFIG); //http://www.bliao.com:2000/ip.phtml
  2.         char strXMLReturn[1024]={0};
  3.         CHttpFile* myHttpFile;
  4.         try
  5.         {
  6.                 myHttpFile = (CHttpFile*)mySession->OpenURL(L"http://www.ip138.com/ip2city.asp");//,1,INTERNET_OPEN_TYPE_DIRECT,NULL,0);
  7.         }
  8.         catch(char*)
  9.         {
  10.                 return 0;
  11.         }
  12.         while(myHttpFile->Read(strXMLReturn,1024));
  13.         myHttpFile-> Close();
  14.         delete mySession;
  15.         mySession->Close(); [align=left][/align][align=left][/align]
点赞  2010-1-27 17:01
楼上大姐,这个openurl方法可以用来传二进制的文件吗?我是用来下载图片的...
点赞  2010-1-27 17:26
openurl好像是用来下html文件或者xml的吧...
没整明白..
点赞  2010-1-27 18:52
问题还在,继续等待
点赞  2010-1-28 08:49
难道是这传说中的分不够??可是我最高只能发100分的贴子
点赞  2010-1-28 11:09
呵呵,学习,学习,你现在需要被顶贴…
点赞  2010-1-29 07:23
恩,继续等
点赞  2010-1-29 09:51
好像没什么人回答嘛...帮顶起来
点赞  2010-1-29 14:02
调用InternetReadFile之前,看看返回的状态对不(200),还有返回的数据长度。收到的那部分数据对么?
点赞  2010-1-29 17:32
引用: 引用 18 楼 ultrapro 的回复:
调用InternetReadFile之前,看看返回的状态对不(200),还有返回的数据长度。收到的那部分数据对么?
传说中的大犇都回归了,哈哈,继续学习…
点赞  2010-1-30 09:45
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复