Что такое файловая структура?

Каждый тип файла состоит из набора структур, которые следуют строгой спецификации. Если файл не соответствует спецификации, соответствующей минимальным изложенным правилам, это может привести к ошибкам чтения файловой структуры. Я столкнулся со многими обстоятельствами, когда некоторые типы файлов не имеют четко определенной и актуальной спецификации, которую можно найти в Интернете. Поэтому очень легко пропустить определения типов, структуры и правила. Это может иметь серьезные негативные последствия для читаемого файла. Я приведу реальный пример, с которым я столкнулся с файловой структурой MP4 ниже.

Пример использования: проблема со структурой EditListBox при чтении файлов MP4:

Я работал над программой, которая читает файлы MP4. Программа использует созданный мной класс определения MP4 и сравнивает файловую структуру с файлом, который читается во время выполнения. Я занимался исследованием проблемы, из-за которой половина файлов MP4, которые я пытался прочитать в коде, терпела неудачу. Для меня сбой не был очевиден, потому что после тщательного чтения из различных источников спецификаций MP4 казалось, что я определил все необходимые структуры, требуемые для файла типа MP4. Двигаясь вперед, мне удалось разобраться, где произошел сбой и какова причина ошибки - биты смещались вправо, что испортило всю операцию чтения файла. Правый сдвиг битов означает, что биты сбрасываются нулями. Причина в том, что два типа - «media_rate_fraction» и «media_rate_integer» были определены как глобальные типы для структуры «EditListBox». Чтобы решить эту проблему, мне пришлось переместить определения двух вышеуказанных типов в дочерние структуры EditListBox. Извлеченный урок - всегда убедитесь, что любые определяемые вами файловые структуры включают все типы, которые он поддерживает… В правильном классе структуры!

Основные причины, по которым чтение файловой структуры может завершиться ошибкой:

  • Определены неправильные структуры - структуры должны быть определены в соответствии со спецификацией. Если вы попытаетесь создать структуры со своими собственными именами / типами / определениями, не соблюдая спецификацию, вы обнаружите, что ваш файл не может быть прочитан.
  • Структуры определены правильно, но не вызываются в правильном порядке. Возможно, вы создали документ определения по спецификации, но это очень важно в том порядке, в котором определяемые вами структуры читаются. Вы должны убедиться, что все структуры читаются в порядке спецификации, определяющей файл, сверху вниз.
  • Неправильно определенные типы структур - очень важно определить типы в ваших структурах в соответствии со спецификацией. Это очень важный момент, потому что разница между определением неназначенного int32 и определением неназначенного int32 с прямым порядком байтов может иметь огромное значение для правильного чтения файла или нет. Поэтому будьте осторожны и тщательно следуйте спецификациям.
  • Убедитесь, что у вас есть действующие структурные правила при чтении файлов. Убедитесь, что вы определили правила в соответствии со спецификацией. Это важно для обеспечения чтения структур только при выполнении условий. Если вы не включите необходимые правила, ваши структуры будут прочитаны и назначены в неправильных местах в документе, что приведет к тому, что файл будет признан недействительным.

Посмотрите Elecard Video Format Analyzer - бесплатный инструмент, который мне очень пригодился для отображения структур видеоформатов (включая MP4) в виде дерева.