Работа с файлом в 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.