c++ - std::fstream 错误

标签 c++ file-io std

我在解析文件时遇到了一些问题

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

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

[nothing, effect from \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 仍将是上一行中的相同命令,这给我带来了一些麻烦。

有没有办法检查这个?如果是,怎么做?

最佳答案

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

关于c++ - std::fstream 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10447986/

相关文章:

C++ 和 OpenMP : undefined reference to GOMP_loop_dynamic_start

c++ - 使用 C++ boost asio 的 UDP 通信

c++ - 为什么 std::bind 在将 icc 14.01 与 gcc 4.8 一起使用时会出错?

c++ - 语句内的等号/赋值运算符

java - 更改父目录和子目录中的文件名

c++ - 在 std::move 之后重用 std 容器是否安全?

c++ - std::vector.clear() 是否在每个元素上删除(可用内存)?

file-io - 在 Fortran 中打开和编写语句

Python gzip 给出错误并要求输入类似字节

c++ - 标准流适配器