2013-04-05 36 views
7

Tính năng này có hoạt động không?Cách tạo QString từ QTextStream?

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

QTextStream in(&filevar); 

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

} 

filevar.close(); 

Bozo có phải toàn bộ là sometextfile.txt không?

+0

Bạn không mở tệp, hãy xem câu trả lời của tôi. – dtech

+0

Cảm ơn câu trả lời. Tôi đang xây dựng một ứng dụng BB10 và tiếc là tôi không thể làm việc này. Tôi chắc chắn nó là cái gì khác tôi đang làm như vậy. Nhưng tôi không thể chọn câu trả lời cho đến khi tôi tìm ra điều gì khác là sai. – Dave

+0

Vâng, nó sẽ hoạt động, nó rất đơn giản và dễ hiểu. Gỡ lỗi mã của bạn từng bước và bạn sẽ tìm thấy sai lầm của mình. BB không thay đổi QFile, do đó, vấn đề là việc triển khai của bạn. – dtech

Trả lời

16

Tại sao lại đọc từng dòng một? Bạn có thể tối ưu hóa nó nhiều hơn một chút và giảm không cần thiết tái phân bổ của chuỗi khi bạn thêm dòng với nó:

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

Như ddriver đề cập, trước tiên bạn nên mở tệp bằng file.open(…); Ngoài ra, vâng bozo sẽ chứa toàn bộ tệp bằng mã bạn có.

Một điều cần lưu ý trong mã ddriver là rằng text.reserve(file.size()); là không cần thiết vì trên dòng sau:

text = in.readAll(); 

này sẽ thay thế text với một chuỗi mới để cuộc gọi đến text.reserve(file.size()); sẽ chỉ thực hiện công việc không sử dụng.

+1

vâng, bạn nói đúng, nó là vô nghĩa để thay đổi kích thước xem xét chuỗi xem xét không có dữ liệu ban đầu để nối thêm vào. cũng sẽ sửa câu trả lời của tôi ... – dtech