0

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

 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;

}
4

3 回答 3

6

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

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

3)getline丢弃换行符。您的最终字符串将是错误的。

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

于 2013-08-26T16:20:35.033 回答
0

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

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

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

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

如果您的文件不以 '\n' 结尾,请从字符串中删除最后一个字符

于 2013-08-26T17:20:55.350 回答
0

代替

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

while(!filen.eof())
{
    getline(filen, temp);
    filString.append(temp);
}
于 2013-08-26T16:36:52.613 回答