我在解析文件时遇到了一些麻烦
我要解析的文件的最后两行是:
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
仍将是前一行的相同命令,这给了我一些麻烦。
有没有办法检查这个?如果是的话,怎么样?
答案 0 :(得分:1)
不是答案,而是评论(我不知道如何发表评论)。如果您在数字\n
的最后一行之后有2 eof
则不会触发。我在使用.eof()
时遇到了类似的问题,最好还是检查一下您阅读的内容是否为继续阅读的条件。