Работа с файлом в 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 невозможно по поводу следующей ошибки о неравенстве типов:

ошибка: нет совпадения для оператора >> (типы операндов: "QFile" и "int")

Q: как я могу сделать >> в моем случае работать? Любое предложение? Альтернативы?

1 ответ

Решение

Класс 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.

Другие вопросы по тегам