Qt / C ++ Как разместить в середине файла (смещение) -> известен только размер файла - PullRequest
1 голос
/ 12 августа 2011

Hy всего, в Qt у меня есть:

FILE *pInFile = fopen(strFileName.toLatin1().constData(), "r");
QFileInfo fi(strFileName);
qint64 fileSize = fi.size();

//GO TO THE MIDDLE
//WHAT IS THE POSITION OF THE MIDDLE (INTEGER)

Вместо того, чтобы читать весь файл (fgets) в цикле, я хочу узнать смещение середины файла. И на основании этого смещения я хочу получить эту позицию.

В основном,

  • получить смещение из файла на основе заданных байтов (пример: fileSize / 2)
  • на основе этого смещения, какова позиция (индекс строки)

Возможно ли иметь что-то подобное для определения позиции? int centerPos = ftell (Смещение по середине, pInFile);

Не думаю, что я на правильном пути. Можете ли вы дать какой-нибудь совет?

Thx

пс.

И было бы неплохо позиционировать в начале позиции

Ответы [ 2 ]

3 голосов
/ 12 августа 2011

Используйте QFile вместо необработанного указателя файла. У него есть метод seek.

http://doc.qt.nokia.com/latest/qfile.html#seek

Вы можете определить середину файла, используя

QFile myfile("filename");
int middle = myfile.size() /2;

... затем, как уже упоминалось, начинайте читать с этой позиции после вызова

myfile.seek(middle).
1 голос
/ 12 августа 2011
  • Открыть файл в режиме добавления.
  • do ftell () , чтобы узнать конечную позицию файла.
  • Рассчитайте середину файла, вдвое уменьшив шаг 2, и сохраните его в переменной с именем middle.
  • Затем определите следующую функцию

    void middle_fseek (FP * FilePointer, int offset)

    {

    fseek (FilePointer, middle + offset, SEEK_SET);

    }

...