从文件中读取文本的问题

时间:2013-08-26 16:18:40

标签: c++ getline

我有这个函数从文件中读取文本并将其添加到字符串中,现在奇怪的是,如果它是一个短文本它可以正常工作。但是如果它的文本较长,那么字符串就会变空,那么解决这个问题的任何帮助都会受到赞赏。

 string inlasning(string namn)
{
    string filString, temp;

    ifstream filen(namn.c_str());

    if(!filen.good())
    {
        cout << "Otillganglig fil" << endl;
        filString = "ERROR";
        return filString;
    }
    else
    {
        while(!filen.eof())
            getline(filen, temp);
            filString.append(temp);
    }

    filen.close();
    return filString;

}

3 个答案:

答案 0 :(得分:6)

1)不要使用eof()来控制循环。将getline直接置于循环条件中。如果您在执行此操作时遇到问题,请搜索StackOverflow。

2)你的while循环没有括号,因此只覆盖getline行,尽管你有误导性的缩进。

3)getline会丢弃换行符。你的最后一个字符串是错误的。

4)你观察到的实际行为来自于你只追加getline返回你的字符串的最后一件事。当您的文件包含一行文本但不以换行符结尾时,这似乎有效。如果它有更多的行但不以换行结束,那么你只会得到最后一行。如果文件以换行符结尾,由于你的循环条件不正确,最后一次调用getline实际上会给你一个空字符串,这正是你字符串的内容。

答案 1 :(得分:0)

替换

while(!filen.eof())
    getline(filen, temp);
    filString.append(temp);

while(!filen.eof())
{
    getline(filen, temp);
    filString.append(temp);
}

答案 2 :(得分:0)

使用“is_open()”检查文件是否存在:

if( ! filen.is_open() ){...} //您不需要else子句

...你的while循环必须有大括号,否则它只会执行getline(...)指令:

while( filen.good() ) {
    getline( filen , temp );
    filString += ( temp + '\n' );
}

如果您的文件没有以'\ n'结尾,请从字符串

中删除最后一个字符