Задумка такая: считали ID и длину тега, смотрим интересен ли нам он. Нет - seek на следующий. Да - заглатываем имя и др информацию (обычной сериализацией). Т.е. использовать sizeof (MyTag) никто не собирается, Обычно считывается контейнер тегов (их заголовков) а там уже по месту.
Неоптимальное решение, ибо если в архиве тысяча файлов и нужный файл самый последний, то придётся про-seek-ать весь файл.
Для таких вещей обычно делается такая структура архива:
в начале файла храним указатель на индекс:
struct Header
{
quint64 index_offset;
quit64 index_size;
};
в MyTag нужно добавить quit64 offset;
далее друг за дружкой пишем файлы c сохранением позиции начала файла в MyTag::offset
и уже после них получаем Header.index_offset;
далее пишем MyTag's, заполняем Header.index_size;
далее встаём в начало файла и опять пишем Header.
При чтении считываем Header. По его данным получаем индекс. В индексе ищем нужный файл и получаем его смещение.