查了一下msdn,说返回的值取决于url:URL               type Returns 
file://            CStdioFile* 
http://            CHttpFile* 
gopher://          CGopherFile* 
ftp://             CInternetFile* 可是我的url是http的,却返回CStdioFile*,为何?
另外,我定义一个file接收返回的网页数据,file = session.OpenURL(m_url);当file定义为CHttpFile*或CInternetFile*时,file->ReadString均能正确读出数据,那么,这两种类型有差别吗?还有,当我的url不是网页而是文件时,例如http://.../1.zip,file应该设为什么类型?应该怎么来接收文件?我的popo:dick_zz,欢迎和我这个菜鸟交流

解决方案 »

  1.   

    CHttpFile继承自CInternetFile,而ReadString是CInternetFile的方法,所以
    当file定义为CHttpFile*或CInternetFile*时,file->ReadString均能正确读出数据当然有区别了
    如果用CInternetFile只能用其自己的方法
    而CHttpFile可以用两者的方法,你应该好好学习以下C++语法
      

  2.   

    例如http://.../1.zip,file应该设为什么类型?应该怎么来接收文件?
    用CHttpFile就行,它是使用Http协议的网页都可以使用的。
      

  3.   

    CStdioFile 是CInternetFile的父类
      

  4.   

    当file = session.OpenURL(m_url);m_url类似于http://.../1.zip,那么接下来该怎么做才能把这个文件保存到本地呢?
      

  5.   

    TCHAR sz[1024];
    CInternetSession session (_T("Update 1.0"), 1,
      INTERNET_OPEN_TYPE_DIRECT);
    CStdioFile* pFile = NULL;
    CHAR   szHead[] = "Accept: */*\r\n\r\n";
    DWORD nRead;
    CFile myFile;
    // CFileException fileException;
    if ( !myFile.Open (m_CurrUpdatePath+"\\update.zip", CFile::modeCreate | CFile::modeReadWrite,
    NULL) )
    {
    return FALSE;
    }
    CString str=m_sWebURL;
    str+="/update/update.zip";
    // try
    {
    pFile = session.OpenURL (str, 1, INTERNET_FLAG_RELOAD
    |INTERNET_FLAG_TRANSFER_BINARY,
    szHead, -1L);

    }
    do
    {
    nRead = pFile->Read(sz, 1023);
    if (nRead != 0)
    myFile.Write (sz, nRead);
    }
    while (nRead != 0);
    myFile.Close();
    pFile->Close();
    if (pFile != NULL)
    delete pFile;
    session.Close();