Yoksel: libepf/format ...
SourceForge.net Logo

Home Page | Изменения / НовыеКомментарии / Справка / Помочь проекту | Вход:  Пароль:  

Формат epf/erf файлов

Файл epf состоит из заголовка и набора блоков.

Заголовок


4 значения типа DWORD:


7fffffff – смещение следующего суперблока в файле
00000200 – минимальный размер блока каталога и блока содержимого файла
00000007 – unknown, может меняться
00000000 – unknown


Смещение следующего суперблока всегда установлено в значение 7fffffff. Случаи, когда там было другое значение, наблюдались только после падения 1С на «конвертации» неправильно сгенеренных epf-файлов.

Набор блоков


Блоки бывают трех видов: блок оглавления, блок-описатель файла, блок содержимого файла.


Блок состоит из заголовка блока и содержимого блока.

Заголовок блока


Сначала перевод строки: 0D 0A
Три числа в текстовом виде (hex-представление). Каждое число занимает восемь символов и еще пробел. В конце блока опять перевод строки.


Первое число – длина данных
Второе число – размер блока
Третье число – смещение следующей части данных


Содержимое идет непосредственно после конечного перевода строки заголовка блока. Содержимое некоторых блоков дополняется до минимального размера блока, определенного в заголовке файла.


Если блок не дополняется до минимального размера, то в качестве длины данных и размера блока указывается одно и то же значение: реальный размер данных.


Если блок дополняется до минимального размера, то все зависит от объема данных:



Если длина содержимого больше минимального размера блока и для этих данных предусмотрено разбиение на несколько блоков (вместо хранения в виде одного сплошного куска), то данные записываются следующим образом:

Блоки оглавления

Самым первым блоком файла идет первый (и, возможно, не последний) блок оглавления. Оглавление файла состоит из множества ссылок на блоки, хранящие описание файлов, и блоки с содержимым файлов. Оглавление записывается в виде набора блоков так, как описано выше.


Содержимое оглавления это несколько записей. Каждая запись это три значения DWORD:


Записи сохраняются отсортированные по имени файла.

Блок-описатель файла

Блоки данного вида не дополняются до минимального размера блока и не разбиваются на несколько. Содержимое блока следующее:

Блок содержимого файла

Блоки данного вида хранятся в виде одного блока, независимо от размера данных. Если размер данных меньше минимального размера блока, то блок дополняется нулями. Однако, не исключено, что данные могут быть сохранены в виде набора блоков. Правда, наблюдать такого еще не приходилось.


Содержимое сжимается по алгоритму deflate без заголовка.


Читать epf-файл следует с файла по имени “root”.

Файл root


Файл содержит ссылку на основной файл – содержащий описание свойств внешней обработки. Формат:


MainObject:

number : unknown
GUID : имя файла со свойствами обработки

Файл со свойствами внешнего отчета/обработки

MainObject

Number : unknown : 1
Object : SelfRef : {d59644d4-ad02–43e6-afef-0de1ff7d9c87} – GUID – собственное имя
Number : unknown : 1
Object : UnknownObj1
...

UnknownObj1

GUID : unknown
Object : UnknownObj2
...

UnknownObj2

Number : unknown : 1
Object : UnknownObj3
Number : unknown : 4
Object : UnknownObj8
Object : UnknownObj9
Object : UnknownObj10

UnknownObj3

Number : unknown : 4
GUID : unknown
GUID : unknown
Object: UnknownObj4
GUID: Идентификатор основной формы
String: пустая
GUID: пустой

UnknownObj4

Number : unknown : 0
Object : UnknownObj5
...

UnknownObj5

Number : unknown : 0
Object : UnknownObj6
String : Идентификатор обработки
Object : UnknownObj7
String : пустая
...

UnknownObj6

Number : unknown : 0
Number : unknown : 0
GUID : GUID обработки (?), файл с модулем имеет имя – этот GUID плюс строка “.0”
...

UnknownObj7

Number : unknown : 1
String : язык : “ru”
String : синоним идентификатора обработки
...

UnknownObj10

GUID : unknown
Number : количество форм
GUID : несколько GUID форм обработки, количество GUID в предыдущем числе

Файл с модулем

Хранилище, аналогичное по структуре основному хранилищу epf-файла. Но со следующими отличиями:



В хранилище два файла:


Формы

Каждая форма сохраняется в двух файлах: описание свойств формы, файл с диалогом и модулем формы.

Свойства формы

Имя файла совпадает с GUID'ом формы. Содержимое:

MainObject

Number : unknown : 1
Object : UnknownObj1
Number : unknown : 0

UnknownObj1

Number : unknown : 1
Object : UnknownObj2

UnknownObj2

Number : unknown : 0
Object : UnknownObj3
Object : UnknownObj5 {0}

UnknownObj3

Number : unknown : 9
Object : UnknownObj4
Number : unknown : 0
Number : unknown : 0

UnknownObj4

Number : unknown : 0
Object : SelfRef : два нуля и собственный GUID
String : идентификатор формы
Object : Синоним
String : пустая

Синоним

Number : unknown : 1
String : язык : “ru”
String : синоним

Данные формы

Данные формы записываются в файл с именем, состоящим из GUID'а формы и строки “.0”. Данные хранятся в хранилище той же структуры, что и основное хранилище epf. Содержимое файлов сохраняется без сжатия, к блокам оглавления и содержимому файлов применяется мсвойство «минимальный размер блока» из заголовка. В хранилище находятся два файла: “form” – диалог и “module” – текст модуля. Файлы зачастую оказываются разбиты на несколько блоков.


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]