2013-08-22 52 views
0

予加載文件和需要計算其元件的數目如下:Qt中與文件工作5.1

int kmean_algorithm::calculateElementsInFile() 
{ 
    int numberOfElements = 0; 
    int fileIterator 
    QFile file("...\\iris.csv"); 
    if(!file.open(QIODevice::ReadOnly)) 
    { 
     QMessageBox::warning(0, "Error", file.errorString()); 
    } 
    if(file.isOpen()) 
    { 
     while(file >> fileIterator) 
     { 
      numberOfElements ++; 
     } 
    } 
    file.close(); 
} 

提供的代碼是錯誤的,我意識到這一點,如>>是從fstream(如果我裝載有標準C++如下ifstream file(filename);就不會有問題),因爲我加載使用QFile該文件就意味着file >> fileIterator是不可能WRT關於類型不等式以下錯誤的文件:

error: no match for 'operator>>' (operand types are 'QFile' and 'int')

問:我如何使>>在我的情況下工作?任何建議?備擇方案?

+0

1)在處理Qt中的路徑時使用正斜槓2)也許你正在尋找QTextStream。 – peppe

+0

@peppe 1)你的意思是寫「... // iris.csv」而不是「... \\ iris.csv」? 2)它的功能與功能相同嗎? – Mike

+0

[QTextStream](http://qt-project.org/doc/qt-5.0/qtcore/qtextstream.html#details) – thuga

回答

0

QTextStream類允許您使用QIODevice構造它,這恰好是QFile的派生方法。因此,你可以做這樣的事情: -

QFile file(".../iris.csv"); // Note the forward slash (/) as mentioned in the comments 
if(!file.open(QIODevice::ReadOnly)) 
{ 
    QMessageBox::warning(0, "Error", file.errorString()); 
} 

// Use a text stream to manipulate the file 
QTextStream textStream(&file); 

// use the stream operator, as desired. 
textStream >> numberOfElements; 

注意,在路徑的單正斜槓(/)是Qt的,而不是對所有路徑的轉義反斜槓(\\)可以接受的。正斜槓也是在Windows以外的操作系統(如Linux和OSX)中定義路徑的常用方式。