Файл EPF — Как открыть файл .epf? [Шаг-за-шагом]

Это возможно, что расширение имени файла указано неправильно?

rpf, elf, ep, epg, wpf, dpf, pef, ept, epc, ef, spf, pf, fpf, epr, epd

Это возможно, что расширение имени файла указано неправильно?

Мы нашли следующие аналогичные расширений файлов в нашей базе данных:

ProWorx NXT Cross-reference Pointer

Grand Theft Auto V Game Archive

CARE-S InfoWorks Runoff Parameters Data

Executable and Linkable Format File

Gamecube Executable ELF

Pencil for Firefox Document

DOpus v9 Preferences Data

Casio WK-1800 Converted Pattern

ProWorx NXT Cross-reference Pointer

Grand Theft Auto V Game Archive

CARE-S InfoWorks Runoff Parameters Data

Executable and Linkable Format File

Gamecube Executable ELF

Pencil for Firefox Document

DOpus v9 Preferences Data

Casio WK-1800 Converted Pattern

пример.epf

Чтобы открыть этот файл, Windows необходимо знать, какую программу вы хотите использовать для его открытия…

Если вы не знаете как настроить сопоставления файлов .epf, проверьте FAQ.

Терминология

Перейдем непосредственно к теме нашего обсуждения.

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

Во-первых, в этом формате создаются не только файлы конфигурации, но также файлы внешних отчетов и обработок. В интернете мне попадалось название Compound-файл. Возможно, оно является устоявшимся среди старожилов 1С, но мне оно не очень нравится.

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

Смотрим внутрь

Логической единицей хранения данных внутри контейнера является документ. Документ, это осмысленный законченный набор данных, который можно прочитать и каким-то образом интерпретировать. Я специально не пользуюсь термином «файл», поскольку, это название я приберегу для другой сущности,  о которой чуть позже.

Итак, в общих чертах, файл CF (EPF/ERF) представляет собой контейнер, в котором хранятся документы.

Каждый документ внутри контейнера может быть разбит на блоки. Минимальной физической единицей хранения данных является блок, но осмысленной логической единицей является документ. Иными словами, документы внутри контейнера могут лежать в виде разрозненных кусочков (блоков) и для того, чтобы прочитать содержимое документа, все его кусочки нужно собрать и объединить.

Структура блока

Контейнер включает в себя следующие части (по порядку):

  1. Заголовок контейнера
    1. Адрес первого пустого блока, в который можно добавлять данные
    2. Размер блока по умолчанию
    3. Количество файлов в контейнере
  2. Документ оглавления контейнера
  3. Собственно данные, которые перечислены в оглавлении

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

Блок состоит из заголовка и тела. В заголовке указывается общий размер всего документа, размер текущего блока и адрес (позиция в файле) следующего блока. Сразу за заголовком идет тело блока – собственно, те данные, которые нам нужны. Тело блока имеет ровно ту длину (в байтах), которая указана в заголовке.

Внутри контейнера тут и там встречается волшебная константа, обозначающая некую «пустоту» – это число 0x7fffffff.

Когда мы собираем документ из блоков, то смотрим в заголовке на адрес следующего блока. Если он равен 0x7fffffff, то «следующего» блока нет, этот – последний.

Константа 0x7fffffff — это значение INT_MAX, т.е. максимальное значение 4-байтового целого числа со знаком.

Логические «файлы»

Я упоминал, что термин «файл» я приберегу до лучших времен. Эти времена настали :)

Вся конфигурация хранится в контейнере в виде файлов. Если мы вспомним школьный курс информатики, то вспомним, что «файл», говорили нам – это именованный документ.

Файлотличается от «документа» тем, что у него есть имя, и по этому имени к нему можно обращаться. Если мы будем разбирать содержимое конфигурации и строить дерево метаданных, то найдем внутри файлов очень много упоминаний других файлов. Процедура чтения конфигурации оперирует именами файлов и ссылается на них по имени.

чем открыть epf

Если подвести итоги, то можно сказать следующее: в контейнере лежат разные документы, но некоторые из них имеют имя. Такие документы называются «файлы» и они носят не служебный, а непосредственно прикладной характер. Именно файлы хранят информацию о метаданных конфигурации.

Компоненты файла

Каждый файл состоит из двух документов:

  1. Документ атрибутов, который содержит имя файла и даты создания/изменения
  2. Документ содержимого, который содержит собственно тело файла

Особенности сжатия данных.

Контейнер может содержать самые разные файлы. Как правило, это текстовые файлы в кодировке UTF-8. Однако среди файлов контейнера могут встречаться другие файлы-контейнеры. Проще всего провести аналогию с файловой системой. Контейнер – это директория, а файлы внутри контейнера – это ее содержимое. Директория может содержать другие директории.

Корневой каталог этой «файловой системы» — это сам файл *.CF. Внутри него могут быть другие файлы-контейнеры, по сути – вложенные директории, которые считываются ровно по тому же самому алгоритму и имеют ровно ту же самую структуру.

Тем не менее, есть одна особенность корневой директории. Все документы содержимого файлов внутри корневой директории сжаты по алгоритму Deflate. Содержимое файлов внутри вложенных директорий уже не сжато. Проще говоря, на верхнем уровне файла-контейнера тела всех файлов сжаты, но если файл внутри контейнера сам является контейнером, то внутри него файлы уже будут записаны в чистом виде (без сжатия).

Цепочка свободных блоков

Версия для печати

В результате удаления каких-либо данных из контейнера в нем могут образовываться пустые места. Эти свободные места связываются в цепочку и образуют этакий «документ», данные которого отсутствуют. Иными словами, свободные блоки связаны друг с другом по тому же принципу, по которому связаны друг с другом блоки документов.

Краткий итог по теоретической части

  1. Файл CF(EPF/ERF) записан в формате «контейнера»
  2. Контейнер начинается с заголовка
  3. Все содержимое контейнера, за исключением заголовка, записано в виде «документов»
  4. Документ может быть разбит на блоки
  5. Документ начинается с заголовка блока, по которому можно узнать, как прочитать весь документ целиком
  6. Сразу за заголовком контейнера идет документ оглавления
  7. Оглавление, это набор записей, которые указывают на «файлы» внутри контейнера
  8. Каждый файл состоит из двух документов – документа атрибутов, где указано имя этого файла и документа содержимого, где, собственно, расположены данные файла.
  9. Каждая запись оглавления содержит 2 адреса. Первый – адрес документа атрибутов файла, второй – адрес документа содержимого.
  10. Контейнер может содержать вложенные контейнеры (как бы, вложенные папки)
  11. Файлы внутри корневого контейнера сжаты по алгоритму Deflate, файлы внутри вложенных контейнеров записаны без сжатия.

Формат записи документа оглавления

Оглавление содержит перечень указателей на файлы, размещенные в контейнере

Поле

Тип

Пояснение

Адрес документа атрибутов

INT32 (4 байта)

Адрес документа атрибутов файла

Адрес документа содержимого

INT32 (4 байта)

Адрес документа содержимого файлов

Зарезервированное поле

INT32 (4 байта)

Всегда равно 0x7fffffff

Формат документа атрибутов файла

Документ атрибутов описывает имя файла и даты его создания/изменения. 

Поле

Тип

Пояснение

Время создания файла

UINT64 (8 байт)

Время создания файла, выраженное в количестве 100-микросекундных интервалов, прошедших с начала нашей эры (01.01.0001 00:00:00)

Время изменения файла

UINT64 (8 байт)

Аналогично

Зарезервированное поле

INT32 (4 байта)

Всегда равно 0. Возможно, это флаги атрибутов, что-то вроде «только чтение», «скрытый» и т.п. Однако, я не встречал файлов, где это поле бы отличалось от нуля.

Имя файла

Строка в формате UTF-16

Занимает все оставшееся тело документа (за вычетом 2-х дат и резервного поля)

Понравилась статья? Поделиться с друзьями:
Юридическая энциклопедия
Adblock detector