杉丶 2019-06-04 10:01 采纳率: 0%
浏览 315

CFile::Read读不出数据是怎么回事?

新人自学MFC入门,老师要求读取二进制文件。

        CFile Ffile;
        CFileDialog fDlg(TRUE, NULL, NULL, 4 | 2,
    _TEXT("全部文件(*.*)|*.*|(*.rbs_App*)|*.rbs_App*|文本文件(*.txt,*.ini,*.log)|*.txt;*.ini;*.log||"));
if (fDlg.DoModal() == IDOK)
{
    Path = fDlg.GetPathName();//获取文件路径
    CString str;
    CStdioFile fFile;
    CString temp = "solid";
        Ffile.Open(Path, CFile::modeRead | CFile::typeBinary);
        DWORD nFileLen = Ffile.GetLength();
        float Other[84];
        Ffile.Seek(0, CFile::begin);
        Ffile.Read(Other, 84);
        size_t Unit;
        Unit = (nFileLen - 84) / 50;
        for (size_t i = 0; i <= Unit; i++)
        {
            float xyz[12];

            Ffile.Read(xyz, 48);
            //verts.push_back(xyz[12]);

            verts.push_back(xyz[0]);
            verts.push_back(xyz[1]);
            verts.push_back(xyz[2]);
            for (size_t j = 1; j < 4; j++)
            {
                vnorms.push_back(xyz[j * 3]);
                vnorms.push_back(xyz[j * 3 + 1]);
                vnorms.push_back(xyz[j * 3 + 2]);
            }
            Ffile.Read(xyz, 2);
        }
        Ffile.Close();
    }

        用CFile::Read读取二进制文件的时候我把前84字节先读出去。
        但是Ffile.Read(Other, 84);![图片说明](https://img-ask.csdn.net/upload/201906/04/1559613254_211205.png)二进制STL文件80-84字节读不胡来数据,读后面坐标的时候读的也不是正常数据。
        还有在执行到结尾时报错 vector subscript out of range是向量溢出,查过百度之后感觉都不太对的上,想请教一下这是怎么回事?
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-10 02:02
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    CFile::Read()函数用于从指定的文件中读取数据。如果遇到错误或未预期的数据类型时,可能会出现 vector subscript out of range 错误。

    以下是一些可能导致此问题的原因:

    1. 文件格式不匹配:二进制STL文件可能不是标准的二进制格式,例如它可能包含额外的非数字字符或者特殊的字符(比如空格)。这种情况下,读取数据时会遇到错误。

    2. 数据类型不正确:如果你尝试读取的是一个浮点数,但文件中的内容却是整数值,那么读取的结果也会出现问题。

    3. 文件损坏:如果文件本身损坏,也可能导致读取失败。

    4. 文件不存在:如果尝试打开的文件实际上并不存在,这同样会导致读取失败。

    为了解决这个问题,你可以尝试以下方法:

    1. 检查文件的格式和内容,确保它们符合二进制STL文件的标准格式。
    2. 使用 GetLastError() 函数检查 CFile::Read() 函数是否返回了一个错误码。如果返回了错误码,请查看其含义以确定具体原因。
    3. 如果文件确实不存在,尝试使用 fFile.Open() 方法并设置适当的参数来检查文件是否存在,并且可以被访问。

    希望这些信息能帮助你解决问题!

    评论

报告相同问题?