我有这个函数从文件中读取文本并将其添加到字符串中,现在奇怪的是,如果它是一个短文本它可以正常工作。但是如果它的文本较长,那么字符串就会变空,那么解决这个问题的任何帮助都会受到赞赏。
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;
}
答案 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'结尾,请从字符串
中删除最后一个字符