如果判断一个网络文件是否存在?

wuxing2046 2008-11-19 11:34:20
网络上有个图片文件,如http://www.baidu.com/img/baidu_logo.gif ,现在要判断它是否存在
...全文
105 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuxing2046 2008-11-19
  • 打赏
  • 举报
回复
很这段DELPHI功能一样,转成VC更好

function CheckUrl(url: string): Boolean;
var
hSession,hfile: hInternet;
dwindex, dwcodelen: dword;
dwcode: array[1..20] of Char;
res: PChar;
begin
Result := false;
if Pos('http://', LowerCase(url)) = 0 then url := 'http://' + url;
hSession := InternetOpen('InetURL:/1.0', INTERNET_OPEN_TYPE_PRECONFIG,
nil, nil, 0);
if Assigned(hsession) then
begin
hfile := InternetOpenUrl(hsession, PChar(url), nil, 0, INTERNET_FLAG_RELOAD, 0);
dwIndex := 0;
dwCodeLen := 10;
HttpQueryInfo(hfile, HTTP_QUERY_STATUS_CODE, @dwcode, dwcodeLen, dwIndex);
res := PChar(@dwcode);
Result := (res = '200') or (res = '302'); //200,302未重定位标志
if Assigned(hfile) then
InternetCloseHandle(hfile);
InternetCloseHandle(hsession);
end;
end;
sealy_2007 2008-11-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuxing2046 的回复:]
很这段DELPHI功能一样,转成VC更好


Delphi(Pascal) codefunction CheckUrl(url: string): Boolean;
var
hSession,hfile: hInternet;
dwindex, dwcodelen: dword;
dwcode: array[1..20] of Char;
res: PChar;
begin
Result := false;
if Pos('http://', LowerCase(url)) = 0 then url := 'http://' + url;
hSession := InternetOpen('InetURL:/1.0', INTERNET_OPEN_TYPE_PRECONFIG,
nil, nil…
[/Quote]

这段代码是wininet系列函数的调用,C++里面也是几乎同样的代码;
原理是下载url指定的文件,如果文件不存在,一般返回4XX的错误(比如404)

如果楼主没有很高的设计要求,URLDownloadToCacheFile可能就够用了,
这个api直接下载网络文件,包括ftp和http的文件
缺点就是:它会使用本地cache,服务器文件变更以后,它会反应很慢,而wininet通过参数可以不使用本地cache
但方便之处在于一行代码搞定
caitian6 2008-11-19
  • 打赏
  • 举报
回复
学习
MobileGIS 2008-11-19
  • 打赏
  • 举报
回复
各位再看看我刚才那个在硬件/嵌入开发版贴子已经被版主删除了,他是担心 什么,还没有一会就直接删除,而且也没个通知说明一下,各位兄弟这里的版主是正直,但是做事的方式有欠妥,直得商榷,我不是说打广告对,我是说他直接封我ID,之前不说一下,之后不通知,感觉很郁闷!如果他提醒一下我一定停止发,他不说我以为这个可以发了,因为之前我是有准备哪个版主提醒一下我很快就不发,所以我才对他不提醒很气愤!


对版主处理问题武断,简单,粗暴的方式表示严重的抗议! 你看你只有也只能删除一下留言,封封几个不听话的ID,还能做点别的不?

另外各位看看下面这两个帖子!

http://topic.csdn.net/u/20081118/15/5ade4cdf-3a30-4481-be9d-1b97b88cde48.html

http://topic.csdn.net/u/20081118/08/cf7d0af3-35cc-4fb7-9dc2-4567041b89e5.html?seed=1367941736


看看下面就是大版主就此事所表的态度,我对此大版主表示可悲,为CSDN感到可耻!
如此蛮横之人兑是如此大版主!

白夜花寒 2008年11月18日 15点42分30秒 说:
那你注册上千个好了。我看你注册ID的时间要得长,还是我DEL帐户的时间长。
lygfqy 2008-11-19
  • 打赏
  • 举报
回复
先建立好链接,然后用下载,下载不到,看错误代码咯
zaodt 2008-11-19
  • 打赏
  • 举报
回复

看这个地址:

http://www.baidu.com/img/baidu_logo.gif


打头的是 http


所以,你需要掌握基础的 HTTP 协议知识,这个问题就很容易解决了。
cnzdgs 2008-11-19
  • 打赏
  • 举报
回复
既然有代码,参考其调用的函数和使用的参数,自己来写就是了。

18,357

社区成员

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

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