2013-08-26 63 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」結束,從字符串