fread读到数据不代表读成功

来源:互联网 发布:中国进口台湾数据 编辑:程序博客网 时间:2024/04/27 23:47
        void encode(FILE *hf)
        {
            fwrite(&offset, sizeof(offset), 1, hf);
            fwrite(&idLen, sizeof(idLen), 1, hf);
            fwrite(id.c_str(), 1, idLen, hf);
            fwrite(&dataLen, sizeof(dataLen), 1, hf);
        }
        bool decode(FILE *hf)
        {
            int a1=    fread(&offset, sizeof(offset), 1, hf);
            if(a1!=1)
            {
                return false;
            }
            int a2=    fread(&idLen, sizeof(idLen), 1, hf);
            if(a2!=1)
            {
                return false;
            }
            id.resize(idLen);
            int a3=    fread((void*)id.c_str(), 1, idLen, hf);
            if(a3!=idLen)
            {
                return false;
            }
            int a4=    fread(&dataLen, sizeof(dataLen), 1, hf);
            if(a4!=1)
            {
                return false;
            }
            return true;
        }
    };
    typedef std::list<PackItem> ITEM_LIST;
    typedef ITEM_LIST::iterator ITEM_IT;
    typedef std::map<std::string,PackItem> ITEM_MAP;
    typedef ITEM_MAP::iterator MAP_IT;
    BOOL open(LPCTSTR path)
    {
        _file = _tfopen(path, _T("rb"));
        if(_file == NULL)
            return FALSE;
        DWORD headOffset = 0;
        fread(&headOffset, sizeof(headOffset), 1, _file);
        fseek(_file, headOffset, SEEK_SET);
        while(!feof(_file))
        {
            PackItem pi;
            if(pi.decode(_file))
            {
                _readItems[pi.id] = pi;
            }
        }
        return TRUE;

    }

fread读到数据不代表读成功,在fread读取失败的时候,缓冲区可能保存的是上一次读到的数据,所以只有判断返回值是否正确




0 0
原创粉丝点击