==用CInternetSession结合CHttpFile从网络中取文件数据出错==

sunsfq 2004-04-26 12:36:54
CInternetSession session("My ActiveX Control");
BOOL rtn=session.EnableStatusCallback(true);
CHttpFile* pFile=NULL; //for http: web file
pFile=(CHttpFile*)session.OpenURL(m_file,1,\
INTERNET_FLAG_TRANSFER_BINARY);
//INTERNET_FLAG_TRANSFER_BINARY|INTERNET_FLAG_DONT_CACHE);

if(pFile == NULL) return;
DWORD dwLen=pFile->GetLength();

为什么dwLen总是794或796
为什么???
...全文
141 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
gracezhu 2004-08-03
  • 打赏
  • 举报
回复
CHttpFile都没有GetLength这个方法,不知道你怎么会编译通过?
CString query = "";
file->QueryInfo(HTTP_QUERY_CONTENT_LENGTH,query);
long file_len=atol(query);

sometimes the file_len = -1
classfree 2004-08-02
  • 打赏
  • 举报
回复
CInternetSession sess;
CHttpFile* pF=(CHttpFile*)sess.OpenURL(strURL);
char achQueryBuf[32];
DWORD FileCount = 0;
DWORD dwQueryBufLen = sizeof(achQueryBuf);
pF->QueryInfo(HTTP_QUERY_CONTENT_LENGTH, achQueryBuf, &dwQueryBufLen, NULL);
FileCount = (DWORD)atol(achQueryBuf);

FileCount就是文件的长度
wuyapu 2004-05-11
  • 打赏
  • 举报
回复
DWORD dwLength;
myHttpFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH,dwLength);
hotheartlewis 2004-04-29
  • 打赏
  • 举报
回复
写过CInternetSession的哥们帮看看。
http://expert.csdn.net/Expert/topic/3020/3020479.xml?temp=.4537622
max_xy 2004-04-26
  • 打赏
  • 举报
回复
hehe,这里很少有人用CInternetSession的,我以前也用,出了问题,搞不定,只好转SOCKET了
sunsfq 2004-04-26
  • 打赏
  • 举报
回复
为本地文件时OK
若真正下载网上文件时就只可以取出796的长度了
????
sunsfq 2004-04-26
  • 打赏
  • 举报
回复
其中m_file为"http://"打头
xubin_sh 2004-04-26
  • 打赏
  • 举报
回复
CHttpFile的GetLength()是由InternetQueryDataAvailable函数来实现,该函数只返回本地buf中所包含的数据量,所以你得到的总是一个常量
所以建议你用以下的代码:
UINT read = pFile->Read(buf, 1023);
if (file != NULL) {
//use buf
read = pFile->Read(buf, 1023);
}
jiangfb 2004-04-26
  • 打赏
  • 举报
回复
To crescendo(小青):
不是绝对偏小
当文件很小的时候还是没有问题,例如100个字节
crescendo 2004-04-26
  • 打赏
  • 举报
回复
怎么会异常?你可以单独测试我给你的这段程序,是对的。用GetLength得到的数值都偏小
sunsfq 2004-04-26
  • 打赏
  • 举报
回复
请高手指教
sunsfq 2004-04-26
  • 打赏
  • 举报
回复
cb=file->SeekToEnd()引起异常
red-fly 2004-04-26
  • 打赏
  • 举报
回复
没有用过,现在很忙,帮你up
有空再帮你找错
crescendo 2004-04-26
  • 打赏
  • 举报
回复
不要用GetLength

CInternetSession session;
CInternetFile *file=NULL;
long cb=1;
file=(CInternetFile*)session.OpenURL(strURL);
if(file)
{
cb=file->SeekToEnd();//cb是文件的正确长度
file->SeekToBegin();
}
sunsfq 2004-04-26
  • 打赏
  • 举报
回复
上面的程序是我做的Activex中的,我想作个activex放在页面中,用户打开这个页面时可以从我的服务器上下载文件到客户端,但是文件长度老是796,我重写MFC应用程序,同样的代码文件程度就正确,不知为何?
jiangfb 2004-04-26
  • 打赏
  • 举报
回复
这种情况我也遇到过
我当时是做一个在线升级的小程序
没办法我把文件的长度放到存在服务器上的一个配置文件里
我先读配置文件,然后根据记录在里面的文件长度下载需要下载的文件

而实际上好像可以使用CHttpFile::QueryInfo查询HTTP_QUERY_CONTENT_LENGTH

18,356

社区成员

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

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