我遇到了一些麻煩解析文件的std :: fstream的錯誤
文件的最後兩行我想分析是:
˚F814/866/896一千百分之一千零三十五/ 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
仍然是來自上一行的命令,如果一行上沒有任何內容,這給我一些麻煩。
有沒有辦法檢查這個?如果是,如何?
可能的重複:http://stackoverflow.com/questions/21647/reading-from-text-file-until-eof-repeats-last-line總之,eof()不保證在有在流中沒有任何東西可以讀取。只有當你真的試圖讀完最後它纔會返回true。這意味着你需要首先讀*,看看它是否成功,然後才能讀取值。在'while'條件下進行讀操作:'(inFile >> sCommand){...' – jrok
另請閱讀http://www.parashift.com/c++-faq-lite/input-output.html# faq-15.4和這個http://www.parashift.com/c++-faq-lite/input-output.html#faq-15.5 – jrok