std :: fstream错误

时间:2012-05-04 11:31:23

标签: c++ file-io std

我在解析文件时遇到了一些麻烦

我要解析的文件的最后两行是:

  

f 814/866/896 1035/1100/989 817/965/898

     

[没什么,效果来自\ n]

这是我阅读文件的方式:

while(!inFile.eof())
{
    inFile>>sCommand;

    if(sCommand == L"#") 
    {}
    else if(sCommand == L"f")
    {
        int iPos, iTex, iNorm;
        iPos=iTex=iNorm = -1;

        for(auto face=0; face<3; ++face)
        {
            inFile>>iPos;
            --iPos;
            if(inFile.peek() == L'/')
            {
                inFile.ignore();
                inFile>>iTex;
                --iTex;
                if(inFile.peek() == L'/')
                {
                    inFile.ignore();
                    inFile>>iNorm;
                    --iNorm;
                }
            }

            objVertexIndex iObj;
            iObj.iPos=iPos;
            iObj.iTex=iTex;
            iObj.iNorm=iNorm;
            this->AddVertex(iObj);
        }
        m_MaterialIndices_C.push_back(m_CurrentMaterial);
    } //END IF

    inFile.ignore( 1000, '\n' );
} //END WHILE
inFile.close();

但是,我在包含任何内容的文件的最后一行时遇到了一些麻烦。 在文件的最后一行之前,inFile.ignore( 1000, '\n' );将会发生,我希望能够检测到std::fstream::eof(),但由于某种原因,它不是。 如果一行上什么都没有,显然sCommand仍将是前一行的相同命令,这给了我一些麻烦。

有没有办法检查这个?如果是的话,怎么样?

1 个答案:

答案 0 :(得分:1)

不是答案,而是评论(我不知道如何发表评论)。如果您在数字\n的最后一行之后有2 eof则不会触发。我在使用.eof()时遇到了类似的问题,最好还是检查一下您阅读的内容是否为继续阅读的条件。