如何在VC中判断没有Web文件?

squirrel 2000-11-08 11:50:00
我试图用下面的程序来读取一个Web文件:
strFileName="http://www.fadshop.net/squirrel/test.htm";
CInternetSession sess;//建立会话
CHttpFile* fileGet;
CException* e;
TRY
{
fileGet=(CHttpFile*)sess.OpenURL(strFileName);//打开文件
}
CATCH_ALL(e)
{
fileGet = 0; //如果出错就设为0
}
END_CATCH_ALL

if(fileGet) //如果出错或无法打开就不望下执行。
{
CStdioFile fileWrite;
if(fileWrite.Open(strWriteName, CFile::modeWrite|CFile::modeCreate)){
while(fileGet->ReadString(strSentence)){
fileWrite.WriteString(strSentence+"\n");

}
fileWrite.Close();
}
fileGet->Close();
}
sess.Close();
------------
但是在
if(fileGet) //如果出错或无法打开就不望下执行。
不按照我所想像的执行,因为当文件存在时程序正常的运作
当文件不存在时也能fileGet也是非0,并且得到WriteFile的结果如下:
<html>

<head>
<title>错误 404</title>
<meta name="robots" content="noindex">
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312">
</head>

<body>

<h2>HTTP 错误 404</h2>

<p><strong>404 找不到</strong></p>

<p>Web 服务器找不到您所请求的文件或脚本。请检查
URL 以确保路径正确。</p>

<p>如果问题依然存在,请与服务器的管理员联系。</p>
</body>
</html>

我应该如何让Web文件不存在时不执行读文件的操作呢?

就此祝好,松鼠拜上
http://www.fadshop.net/squirrel/
...全文
184 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
squirrel 2000-11-20
  • 打赏
  • 举报
回复
怎么没有人回答第二个问题呢?

我希望大家能指点一下:
1,不知道你们编程时的经典方法是怎么样?是不是我这样做比较罗嗦?
2,如何用post模式提交表单信息呢?

就此祝好,松鼠拜上
squirrel 2000-11-09
  • 打赏
  • 举报
回复
搞定了,我发现msdn里有这句话:
The possible dwInfoLevel values include:
其中有HTTP_QUERY_STATUS_CODE而没有HTTP_QUERY_FLAG_NUMBER
所以我把那句话改为:
fileGet->QueryInfo(HTTP_QUERY_STATUS_CODE, strBuffer, &dwBufSize);
if (strBuffer.Compare("404") != 0){
可以执行得很好,甚谢。
strFileName="http://www.fadshop.net/squirrel/test.htm";
CInternetSession sess;//建立会话
CHttpFile* fileGet;
CException* e;
TRY
{
fileGet=(CHttpFile*)sess.OpenURL(strFileName);//打开文件
}
CATCH_ALL(e)
{
fileGet = 0; //如果出错就设为0
}
END_CATCH_ALL

if(fileGet) //如果出错或无法打开就不望下执行。
{
fileGet->QueryInfo(HTTP_QUERY_STATUS_CODE, strBuffer, &dwBufSize);
if (strBuffer.Compare("404") != 0){
CStdioFile fileWrite;
if(fileWrite.Open(strWriteName, CFile::modeWrite¦CFile::modeCreate)){
while(fileGet->ReadString(strSentence)){
fileWrite.WriteString(strSentence+"\n");

}
fileWrite.Close();

}
fileGet->Close();
}
sess.Close();
------------

不知道你们编程时的经典方法是怎么样?是不是我这样做比较罗嗦?

就此祝好,松鼠拜上
squirrel 2000-11-09
  • 打赏
  • 举报
回复
甚谢.我才知道有这个函数。

但是我用不起来,因为我用
if(fileGet)
{
CString strBuffer;
DWORD dwBufSize=0;
fileGet->QueryInfo(HTTP_QUERY_FLAG_NUMBER ¦ HTTP_QUERY_STATUS_CODE, strBuffer, &dwBufSize);

编译没问题,但每每执行到这句话就出错:
(vc98\mfc\src\inet.cpp)
BOOL CHttpFile::QueryInfo(DWORD dwInfoLevel, CString& str,
LPDWORD lpdwIndex) const
{
ASSERT(dwInfoLevel <= HTTP_QUERY_MAX && dwInfoLevel >= 0);
再查过去,HTTP_QUERY_MAX 只有
#define HTTP_QUERY_MAX 74 (include\wininet.h)

#define HTTP_QUERY_FLAG_NUMBER 0x20000000

我多次查看msdn都看不懂,究竟这个queryinfo如何使用呢?

望再指教!

就此祝好,松鼠拜上
squirrel 2000-11-09
  • 打赏
  • 举报
回复
下一个问题:

如何提交表单信息?当然还在vc里。
我不想用http://xxx/input.asp?test=1&from=jh1234@163.net&lskdfjls=lkdjfs...
的方式,觉得这种方式不正宗,是用GET模式。

如何用post模式呢?

已经给edyang加分30,请查收

就此祝好,松鼠拜上
Edward 2000-11-09
  • 打赏
  • 举报
回复
在打开文件后,你需要用
CHttpFile::QueryInfo(HTTP_QUERY_FLAG_NUMBER | HTTP_QUERY_STATUS_CODE, lpBuffer, &dwBufSize)
来得到 HTTP 协议返回代码,如 404。

16,547

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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