我加载一个文件,需要按如下方式计算其中的元素数量:
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')
问:如何让>>
在我的案子中工作?有什么建议吗?替代?
答案 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。