在Qt 5.1中使用文件

时间:2013-08-22 21:34:49

标签: c++ qt fstream ifstream

我加载一个文件,需要按如下方式计算其中的元素数量:

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不可能出现以下关于类型不等式的错误:

  

错误:'运营商>>'不匹配(操作数类型是'QFile'和'int')

问:如何让>>在我的案子中工作?有什么建议吗?替代?

1 个答案:

答案 0 :(得分: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。