大家好,我要实现如下功能:从服务器上下载一个二进制文件到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"测试不成功!");
总是返回不成功!
谢谢大家!
补充:
使用if(::URLDownloadToFile(NULL,strURL,filename,0,NULL) ==S_OK)
{
MessageBox(L"测试成功!");
}
else
MessageBox(L"测试不成功!");
也是返回测试不成功!!
URLDownloadToFile 返回的错误代码是什么?
strURL="http://127.0.0.1:8080/test/test.jpg"; 改成
strURL=_T("http://127.0.0.1:8080/test/test.jpg");试试
谢谢楼上:我用getlasterror()得到返回值是997,再用错误查找工具看了下,997的意思是:重叠 I/O 操作在进行中。
重叠 I/O 操作在进行中。
这个我查了下,说不是一个错误!可是我不知道下面要具体怎么处理?
期待“骨灰”出现,帮忙看下下面怎么做!!
google一下,先自己看看嘛!
我也想知道怎么处理!!
重叠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里它能正确显示这张图
用OpenURL方法试试
给个例子你参考下
- CInternetSession* mySession = new CInternetSession(_T("http://www.ip138.com/ip2city.asp"), 1, INTERNET_OPEN_TYPE_PRECONFIG); //http://www.bliao.com:2000/ip.phtml
- char strXMLReturn[1024]={0};
- CHttpFile* myHttpFile;
- try
- {
- myHttpFile = (CHttpFile*)mySession->OpenURL(L"http://www.ip138.com/ip2city.asp");//,1,INTERNET_OPEN_TYPE_DIRECT,NULL,0);
- }
- catch(char*)
- {
- return 0;
- }
- while(myHttpFile->Read(strXMLReturn,1024));
- myHttpFile-> Close();
- delete mySession;
- mySession->Close(); [align=left][/align][align=left][/align]
楼上大姐,这个openurl方法可以用来传二进制的文件吗?我是用来下载图片的...
openurl好像是用来下html文件或者xml的吧...
没整明白..
难道是这传说中的分不够??可是我最高只能发100分的贴子
调用InternetReadFile之前,看看返回的状态对不(200),还有返回的数据长度。收到的那部分数据对么?
引用: 引用 18 楼 ultrapro 的回复:
调用InternetReadFile之前,看看返回的状态对不(200),还有返回的数据长度。收到的那部分数据对么?
传说中的大犇都回归了,哈哈,继续学习…