2013-04-05 31 views
7

這個工作嗎?如何從QTextStream中創建QString?

QString bozo; 
QFile filevar("sometextfile.txt"); 

QTextStream in(&filevar); 

while(!in.atEnd()) { 
QString line = in.readLine();  
bozo = bozo + line; 

} 

filevar.close(); 

請問bozo是sometextfile.txt的全部嗎?

+0

你不打開該文件,看看我的答案。 – dtech 2013-04-05 00:54:58

+0

感謝您的答案。我正在構建一個BB10應用程序,但不幸的是我無法讓這個工作。我很確定這是我正在做的其他事情。但是,除非我認爲還有什麼不對,否則我無法選擇答案。 – Dave 2013-04-05 04:58:08

+0

那麼,它應該工作,它很簡單,直接。一步一步調試你的代碼,你會發現你的錯誤。 BB不會改變QFile,所以問題在於你的實現。 – dtech 2013-04-05 10:20:16

回答

16

爲什麼即使一行一行地閱讀?你可以多一點對其進行優化,減少串的不必要的重新分配,你行添加到它:

QFile file(fileName); 
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; 
QTextStream in(&file); 
QString text;  
text = in.readAll(); 
file.close(); 
3

由於ddriver提到,應先打開使用file.open(…);除此之外文件,是bozo將包含整個文件使用你的代碼。

一件事ddriver的代碼需要注意的是text.reserve(file.size());是不必要的,因爲在下面一行:

text = in.readAll(); 

將用一個新的字符串替換text所以調用text.reserve(file.size());將剛做未使用的工作。

+1

是的,你是對的,考慮到沒有要追加的初始數據,考慮字符串調整大小沒有意義。我會修復我的答案以及... – dtech 2013-04-05 01:24:49