class ReadFile {
public:
void init();
QList<double> getData();
private:
QFile file;
QDataStream read;
double bufferFloat;
quint32 bufferInteger
}
Теперь идея состоит в том, что при вызове init() файл должен быть открыт и перемещен в место, где начинаются данные. Теперь каждый раз, когда вызывается getData(), часть байтов должна считываться из файла.
Псевдокод выглядит так:
void ReadFile::init()
{
file.setFileName("...");
file.open(QIODevice::ReadOnly);
QDataStream read(&file);
// This chunk does some magic to find correct location by applying
// a readout (read >> bufferInteger) and check the result
// I can verify that at this point, if doing a readout (read >> bufferFloat)
// I get good data (i.e. corresponding to the file).
}
а также
QList<double> ReadFile::getData()
{
// Doing a (read >> bufferFloat) at this point will result in zeros.
}
Я понимаю, почему это происходит, поскольку read
в init
объявляется локально. Но как мне распределить поток данных, чтобы getData
мог продолжить с того места, где остановился init
? И следующий getData
может продолжиться с того места, где остановился предыдущий. Последовательность вызова будет выглядеть так:
ReadFile file();
file.init();
file.readData();
file.readData();
file.readData();
file.readData();
//etc...
QFile
членом класса. - person Amartel   schedule 02.06.2015