none
CInternetFile 的read 在英文版本 中出现异常,报“参数错误”,错误值:87,求解???? 难道 WINXP 英文版 API 不一样?? RRS feed

  • 问题

  •    ((CHttpFile*) m_pInternetFile)->QueryInfoStatusCode(dwStatusCode);

       //判断状态码是不是 200
       if (HTTP_STATUS_OK == dwStatusCode)
       {
        DWORD   m_PerFileSize = 0;
        m_PerFileSize = static_cast<int>(m_pInternetFile->SeekToEnd());

        char *buffer = new char[m_PerFileSize + 1];
        memset(buffer, 0, sizeof(buffer) + 1);

        int iFileBytes= 0;  
        int iFileBytesCopied= 0;
        int iBytesRead = 0;  

        int m_lStartReadingByte = 0;

        if (iFileBytes != m_PerFileSize)
        {
         m_pInternetFile->Seek(m_lStartReadingByte, CFile::begin);
         iFileBytesCopied = m_lStartReadingByte;

         //获取版本信息保存在szBuffer中
         while (iBytesRead = m_pInternetFile->Read(buffer, MAXSIZE))
         {
          iFileBytesCopied += iBytesRead;
         }
         buffer[iFileBytesCopied] = '\0';
         m_strRet =  A2W(buffer);
        }

    2013年1月7日 4:23

答案

  • memset(buffer, 0, sizeof(buffer) + 1);

    应该改成 :

    memset(buffer, 0, m_PerFileSize + 1);

    m_pInternetFile->Read(buffer, MAXSIZE)) 也不对,第二个参数必须小于等于 buffer 的大小,应该改成:

    m_pInternetFile->Read(buffer, m_PerFileSize + 1 - iFileBytesCopied))

    • 已标记为答案 mdebug 2013年1月7日 9:18
    2013年1月7日 5:22

全部回复

  • ??????????没人帮忙吗?
    2013年1月7日 5:22
  • memset(buffer, 0, sizeof(buffer) + 1);

    应该改成 :

    memset(buffer, 0, m_PerFileSize + 1);

    m_pInternetFile->Read(buffer, MAXSIZE)) 也不对,第二个参数必须小于等于 buffer 的大小,应该改成:

    m_pInternetFile->Read(buffer, m_PerFileSize + 1 - iFileBytesCopied))

    • 已标记为答案 mdebug 2013年1月7日 9:18
    2013年1月7日 5:22
  • 额。还真是。。 MAXSIZE 也会比buff小啊。。
    2013年1月7日 6:04