社区
网络编程
帖子详情
pFile->QueryInfo(HTTP_QUERY_LAST_MODIFIED, &stUTC) 多次调用出错
himaernew
2004-11-21 10:52:34
我想取远程文件的最后修改日期,重复的调用后就取不到了,但其它的取文件长度等信息还能取到。
对于"HTTP_QUERY_LAST_MODIFIED"的参数有什么特殊的限制吗?
我想这不是很难的问题,但我调了2天了还是没搞清原因。
...全文
480
18
打赏
收藏
pFile->QueryInfo(HTTP_QUERY_LAST_MODIFIED, &stUTC) 多次调用出错
我想取远程文件的最后修改日期,重复的调用后就取不到了,但其它的取文件长度等信息还能取到。 对于"HTTP_QUERY_LAST_MODIFIED"的参数有什么特殊的限制吗? 我想这不是很难的问题,但我调了2天了还是没搞清原因。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
celerityok
2004-11-25
打赏
举报
回复
mark!
Hendy_So
2004-11-24
打赏
举报
回复
在error lookup里的modules里面添加wininet.dll就可以查到winet库里的出错消息了。
himaernew
2004-11-24
打赏
举报
回复
多谢两位!
TO: Hendy_So
我的error lookup查不到12150的错误信息。
这个问题我找到出错地方并已解决了。出错的代码不是在QueryInfo这个函数,而是在HTTP请求句柄处:
CHttpFile *pFile =pConnection->OpenRequest(CHttpConnection::HTTP_VERB_GET,buf,
NULL, 1, NULL, NULL,HSR_DOWNLOAD| INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_NO_AUTO_REDIRECT);
上面的代码在取第2个文件的最后修改时间时会出错。
正确的代码:
CHttpFile *pFile =pConnection->OpenRequest(CHttpConnection::HTTP_VERB_GET,buf,
NULL, 1, NULL, NULL, INTERNET_FLAG_EXISTING_CONNECT|INTERNET_FLAG_RELOAD);
问题就出在传入这个dwFlags上,如单独用"INTERNET_FLAG_EXISTING_CONNECT"也是会出错。
我想出现这个问题还是循环打开文件时, cache没清空的问题,用"INTERNET_FLAG_RELOAD"将不从cache中取值。
看来我需要好好理解一下dwFlags的各个值的真正含义。
光这个问题花了我3~4天,现在也到早晨了。我想这个贴了再留一天,也许还有其它人碰到过相同的问题或有更好的解释,明天结贴。
himaernew
2004-11-24
打赏
举报
回复
TO HENDY_SO:
TKS. 可以查找到错误信息了。
himaernew
2004-11-23
打赏
举报
回复
首先多谢你的耐心。
是这样的,我想做一个自动更新程序,所以需要从网上循环取文件并比较最后修改时间,来确定需更新文件。在调试过程中我发现有些文件可以取到正确的最后修改时间,但有些却不能。
你给我的那篇文章我看过了, 它的情况是只处理一个文件,和我的稍有不同。而且它没有取“最后修改时间”出错的预防和更正,呵,它在取不到时间后只是返回了“xx:x:xx”。
刚开始我也怀疑是缓冲区没清空的问题,但QueryInfo取时间值时是不用处理缓冲区的。
至于上面我做的循环,只是做测试的,我是想要测试一下QueryInfo取SYSTEMTIME的过程中出错的规律。
再次表示感谢,这个问题已困扰我几天了。
kingzai
2004-11-23
打赏
举报
回复
你为什么要循环取呢?MSDN上我还没有找到多次调用会出错的KB,找到一篇它的用法,你可以看看。
http://www.funducode.com/weeklyupdate/March_31/March_31.htm
Article: Using HTTP
Hendy_So
2004-11-23
打赏
举报
回复
12150 未找到申请的邮件标头,vc自带的error lookup可以查错误信息。
不知道你怎么做的,我通常不用MFC的类,而用wininet api。对于不同的远程文件,应该有不同的request对应吧,针对不同的request handle调用queryinfo应该没有问题。
kingzai
2004-11-23
打赏
举报
回复
12150 ERROR_HTTP_HEADER_NOT_FOUND
The requested header could not be located.
我查到的错误是这个,你找个http sniffer对比一下两次的请求包是否一样,对这种怪问题,也只有如此来找问题了。
himaernew
2004-11-23
打赏
举报
回复
执行QueryInfo后用GetLastError()得到的错误码是12150,12150在winerror.h中是没定义的。
himaernew
2004-11-23
打赏
举报
回复
WEB SERVER是WIN2K 自带的IIS
himaernew
2004-11-23
打赏
举报
回复
TO KINGZAI:
TKS, 你说的正确,自动升级按我这样做是不太准确的,但一般能接受。
如果写的ini文件中有修改时间则需要每次更新服务器端都要处理一次这个ini文件(如写入文件的修改时间), 会比较烦。而我这样做则这个ini文件只需要在建立时处理一次就可以了。
我做测试时发现每次重启PC后,第一次总能取到值,但第二次就取不到了,我怀疑虽然QueryInfo(或HttpQueryInfo)取值时没申请但内部还是有缓冲区的设置,取完后没清空。
我测试时用的是VS.NET 2003(没打补丁) + WIN2K 2004 SP4.
kingzai
2004-11-23
打赏
举报
回复
自动升级一般不会读WEB文件的最后修改时间,这样不太准确。你写个ini或文本文件,把最后修改时间写在其中,读取内容之后做比较,这样会比较准确一些。
himaernew
2004-11-22
打赏
举报
回复
TO KINGZAI:
TKS。
我先不用MFC试试,我猜是MFC处理上有问题。
“重新清缓冲区”? 我每次调用都是要初始化“stUTC”的。
kingzai
2004-11-22
打赏
举报
回复
我的理解是每次查询之后重新清缓冲区
himaernew
2004-11-22
打赏
举报
回复
TO:kingzai:
我看以前的贴了,说过把dwquerybuflen设置成一个较大的值就可以,但我还是有几处不明白。
较大是多大?是不是大于sizeof(SYSTEMTIME)的值吗?直接采用MFC是不用该参数的。是不是不能用MFC的这个现成的函数。
kingzai
2004-11-22
打赏
举报
回复
每次查询以后,要把dwquerybuflen设置成一个较大的值就可以。
himaernew
2004-11-22
打赏
举报
回复
用GetLastError()得到的是12150,查不到对应的错误信息。
还有就是我感觉好象不太稳定,有时可取到正确的值,有时不行。
我是这样测试的:连续2次循环取2个文件的最后修改日期,第一次循环时,第1个文件文件2次循环都可正确的取到,第2个文件第1次循环可到正确的值但第2次循环就取不到正确的值了。
但我下午再测试时又变了:第1个文件2次循环都可取到正确的值,但第2个文件第1次循环取不到正确的值了(但第2次循环又可取到正确的值了)
谁知道到底是什么原因呀?我在线等。
himaernew
2004-11-22
打赏
举报
回复
还是不可以,真的不知道要怎么处理了。
内核模块中对文件的读写
一般可以用两种方法: 第一种是用系统
调用
。 第二种方法是filp->open()等函数。...其实分析过sys_open可以知道,最后
调用
的也是filp->open。 sys_open ==> do_sys_open ==> filp->open 其实sy
强删文件--->构建IRP---->独占--->正在运行 以及磁盘读写(思路)
个人比较崇拜360 一个小小的按钮下面蕴含着很多的原理 要有多么强大才能1天搞定偏移 -------致敬360 致敬MJ-001 无奈本人学业不精 只能说说“独占”和“正在运行” 打开文件 一般使用ZwCreate
File
NtCreate
File
...
滴水逆向——
file
buffer->imagebuffer->newbuffer->存盘
n++, pSectionHeaderTemp++) { memcpy((PVOID)((DWORD)pImageTemp + pSectionHeaderTemp->VirtualAddress), (PVOID)((DWORD)*p
File
Buffer + pSectionHeaderTemp->PointerToRawData), pSectionHeaderTemp->...
使用p
file
启动oracle 实例时,启动失败---db_recovery_
file
_de
st
参数值在os上不存在。
使用p
file
启动oracle 实例时,启动失败---db_recovery_
file
_de
st
参数值在os上不存在。
MFC
HTTP
访问方法
int Create
Http
Link() { C
St
ring
St
rServer = ""; C
St
ring
st
rHtml = "";...
St
rServer ="
http
://127.0.0.1/
st
b/pd02/recordnum/te
st
?req_sn=aabbccddeeff"; CInternetSession *pSession = new CInternetSess
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章