使用getline从文件中读取永远不会超过第一行

时间:2016-09-13 14:27:41

标签: c++ file ifstream stringstream

我试图用C ++读取obj文件的内容,我正在努力解决它。自从我用C ++做了很多事情以来已经有几年了,所以我已经忘记了很多,但我对Java更加精通。

我正在尝试读取包含此内容的obj文件

# This file uses centimeters as units for non-parametric coordinates.

mtllib crayon.mtl
g default
v 0.927930 -17.363054 -0.279038
...
vt 0.648603 0.107966
... etc

但是,它似乎无法读取第一行。这是我到目前为止的代码:

void TextureMapper::read_file(string file_name)
{
    ifstream file;
    file.open(file_name);
    if (file.is_open())
    {
        string line;
        while (getline(file, line))
        {
            std::stringstream ss(line);
            string token;
            ss >> token;
            switch (get_obj_type(token))
            {
                case GEOMETRIC_VERTEX:
                    break;
                case TEXTURE_VERTEX:
                    break;
                case VERTEX_NORMAL:
                    break;
                case GROUP_NAME:
                    break;
                case SMOOTHING_GROUP:
                    break;
                case FACE:
                    break;
                case MATERIAL_NAME:
                    break;
                case MATERIAL_LIBRARY:
                    break;
                case COMMENT:
                    break;
                case BLANK:
                    break;
            }
        }
        file.close();
    }
    else
        std::cerr << "Couldn't open " << file_name << " for reading\n";
}

枚举(GEOMETRIC_VERTEXGROUP_NAME等)映射到obj文件的部分(例如vg vt,{ {1}}等。)

编辑我意识到我的文件中的空白行可能会导致异常,所以我为此添加了#,并将其作为enum添加到我的{ {1}}声明,现在我没有得到异常,但它从未读过第一行。

第一行(case)被正确读入,我可以在调试时看到它。但是,当它再次重新进入switch循环时,看起来它会一次又一次地重读同一行。

当我读到这个文件时,我不确定我做错了什么。如果您需要更多信息,请与我们联系。

0 个答案:

没有答案