2013-08-26 130 views
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; 

} 
+0

检查您的数据不具有分散在字符串中间新线删除最后一个字符。 – bjackfly

回答

6

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

2)您的while循环没有大括号,因此只涵盖了getline行,尽管存在误导性的缩进。

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

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

0

更换

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

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

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

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

...而你的while循环必须有大括号,否则它只执行getline(...)instructio N:

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

如果你的文件不是以“\ n”结束,从字符串