Каталог расширений

Популярные теги

3gp       avi       fb2       jpg       mp3       pdf      

Как открыть erf файл в 1с


Расширение и форматы файлов 1С 8.2, 8.3

 

*.cf - файл содержит только конфигурацию(код и структура) без пользовательских данных. Создаётся из конфигуратора 1С 8.х: «Конфигурация -> Сохранить конфигурацию в файл» или «Конфигурация -> Поставка конфигурации -> Создать файл поставки и обновление конфигурации -> признак «Создать файл поставки»».

 

*.cfu - файл содержит только обновление конфигурации. Например файл 1cv8.cfu. Создать конфигурацию из этого файла невозможно, так как он содержит в себе только отличия новой конфигурации от предыдущей. Создаётся из конфигуратора 1С 8.х: «Конфигурация -> Поставка конфигурации -> Создать файл поставки и обновление конфигурации -> признак «Создать файл обновления конфигурации»».

*.cfe - файл-расширение, предназначенный для доработки конфигурации без её изменения. При использовании расширений 1С (*.cfe) - доработанная конфигурация может полноценно обновляться и с поддержки не снимается.

 

*.dt - файл содержит конфигурацию вместе с пользовательской базой данных. Это специализированный формат архива 1С 8. Создаётся из конфигуратора 1С 8.х: «Администрирование -> Выгрузить информационную базу».

 

*.epf (*.erf) – файл внешней обработки (отчёта). Любую обработку (отчёт) из конфигурации можно сохранить внешней.  Создаётся из конфигуратора 1С 8.х: «Конфигурация -> Открыть конфигурацию -> становимся на нужную обработку (отчёт) -> выделяем правой кнопкой мыши -> Сохранить как внешнюю обработку, отчёт…».

*.1cd – файл полноценной базы данных. Представление имени по умолчанию:  1Cv8.1CD. Включает в себя конфигурацию, базу данных, пользовательские настройки. Открывается платформой 1С 8.x. Создаётся для разработки новой конфигурации автоматически по кнопке «Добавить» при выборе пункта «Создание новой информационной базы».

 

*.log, *.lgf, *.lgp, *.elf - лог файлы, которые собирают информацию (регистрируют данные) в 1С 8.0 8.1, 8.2, 8.3. Например, файл 1Cv8.lgf (в каталоге 1Cv8Log) содержит информацию журнала регистрации.

*.cdn - файл с таким расширением (1Cv8.cdn) служит для ручной или автоматической блокировки базы данных 1С Предприятия восьмой версии.

*.mxl - файлы печатных форм используются, в том числе и в 1С. Являются как печатными формами документов, справочников, отчётов, так и различными накопителями данных для различных классификаторов.  Открывается через Конфигуратор или в режиме 1С:Предприятии через «файл -> открыть». Создаётся точно так же: в режиме Конфигуратор или в 1С:Предприятии через «файл -> новый». Так же файлы с такими расширениями могут служить правилами переноса, например, из 1С 7.7 в 8.2 (acc77_82.xml и вспомогательная обработка exp77_82.ert) - находятся они обычно в папке ExtForms.

 

*.efd - это архивный файл 1С, используется для установки конфигурации. Содержит или конфигурацию 1с или обновление к ней. Запускается с помощью вспомогательного исполняющего файла setup.exe (должен находиться в одной папке).

 

*.mft – вспомогательный файл для создания конфигурации из шаблона. Содержит информацию о конфигурации, описание, пути, название. Используется непосредственно самой платформой при создании информационной базы 1С из шаблона.

 

*.grs - файлы графических схем в специализированном формате 1С. Открывается через Конфигуратор или в режиме 1С:Предприятии через «файл -> открыть». Создаётся точно так же: в режиме Конфигуратор или в 1С:Предприятии через «файл -> новый».

 

*.geo - файлы географических схем в специализированном формате 1С. Открывается через Конфигуратор или в режиме 1С:Предприятии через «файл -> открыть». Создаётся точно так же: в режиме Конфигуратор или в 1С:Предприятии через «файл -> новый».

 

*.st - файлы шаблонов текстов. Используются в основном 1С разработчиками.

*.pff - файл с сохраненными замерами производительности. Используются системными администраторами и специалистами 1С.

*.pfl - файл содержащий различные параметры для старта и работы с 1С:

...1Cv8.pfl - параметры для компьютера/информационной базы/пользователя (в т.ч. пароли пользователей, настройки текстового редактора, настройки глобального поиска по текстам конфигурации, список переменных для быстрого просмотра в отладчике)

...1Cv8strt.pfl – параметры диалога выбора информационной базы

...1Cv8cmn.pfl - общие параметры для компьютера, используемые в 1С:Предприятии/Конфигураторе (в т.ч. цвета редактора модулей в конфигураторе)

*.ini - стандартное расширение файла настроек в разных программах. В 1С 8 используется файл nethasp.ini для хранения настроек аппаратного ключа.

Формат файла .erf, чем открыть ERF, описание расширения

Расширение .erf

  • Название формата Файл внешнего отчета 1С

  • Оригинальное название 1C Report File

  • Разработчик: ООО «1С»

  • Категория Все остальные файлы

Описание расширения

Файл внешнего отчета 1C, который не входит в состав прикладного решения.

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

Кроме того, важным преимуществом внешних отчетов является возможность проектировать и отлаживать их в процессе работы 1С:Предприятия, без необходимости сохранения каждый раз конфигурации прикладного решения.

Создать внешний отчет можно в конфигураторе, выбрав в меню Файл - Новый - Внешний отчет.

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

При этом внешние обработки 1C (как и старые внешние отчеты) имеют расширение .EPF.


Обновлено: 02.04.2014г. 4.5 (голосов: 2)

Формат erf, вариант 2:


  • Название формата Игровые ресурсы BioWare

  • Оригинальное название BioWare Entity Resource File

  • Разработчик: BioWare

  • Категория Файлы игр

Описание расширения

Архив, содержащий игровые ресурсы, используемые игровым движком BioWare, например Aurora Engine, Eclipse Engine и Odyssey Engine.

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

Редактировать файлы .ERF можно при помощи редактора ERF Editor из пакета Dragon Age Toolset. ERF-файлы могут быть упакованы вместе в файлами .DAZIP для игры Dragon Age: Origins.

Движок Aurora используется для таких игр как Neverwinter Nights и The Witcher. Eclipse применяется в Dragon Age: Origins, а Odyssey - в Star Wars: Knights of the Old Republic. Каждая из этих игр использует файлы .ERF.


Обновлено: 02.04.2014г. 4.5 (голосов: 2)

Формат erf, вариант 3:


Описание расширения

Фотография в RAW формате, созданная цифровым фотоаппаратом Epson. Хранится в несжатом виде.

Открыть такие фото можно с помощью программы, поставляемой вместе с камерами Epson - Epson PhotoRAW. Также некоторые принтеры Epson напрямую поддерживают печать таких фотографий.


Обновлено: 17.07.2014г. 4.5 (голосов: 2)

Публикации

В этой статье рассказывается, как создать комплект поставки дополнительного отчета или обработки для загрузки в сервис 1cfresh.com.

Содержание

1. Общие сведения

Дополнительные отчеты и обработки создаются на локальном компьютере разработчика с помощью конфигуратора «1С:Предприятие 8» как внешние отчеты и обработки и сохраняются в файл. Стандартное расширение имени этого файла:

  • epf — для дополнительных обработок;
  • erf — для дополнительных отчетов.

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

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

2. Помощник подготовки комплекта поставки

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

Комплект поставки формируется на локальном компьютере разработчика с помощью помощника, выполненного в виде внешней обработки ПодготовкаДополнительныхОтчетовИОбработокКПубликацииВМоделиСервиса.epf .

Чтобы получить файл этой внешней обработки, разработчик дополнительного отчета или обработки должен выполнить следующие действия.

  1. Войти в свой личный кабинет, например, щелкнув ссылку  Личный кабинет на странице Мои приложения сайта сервиса;

  2. Выбрать в окне менеджера сервиса гиперссылку Адаптация:

  3. В выведенной форме Адаптация приложений выбрать вкладку Дополнительные отчеты и обработки.

  4. Будет выведен список доступных разработчику дополнительных отчетов/обработок. Следует нажать кнопку Создать, выведенную над списком дополнительных отчетов и обработок, или клавишу Insert.
  5. Будет выведено окно мастера добавления дополнительных отчетов и обработок. На первом или втором шаге мастера будет выведена ссылка для скачивания помощника подготовки дополнительных отчетов и обработок к публикации в модели сервиса:

  6. Следует нажать эту ссылку и сохранить файл ПодготовкаДополнительныхОтчетовИОбработокКПубликацииВМоделиСервиса.epf на свой компьютер.

3. Комплект поставки

Дополнительный отчет или обработка должны быть подготовлены для загрузки в сервис в виде комплекта поставки. Комплект поставки является архивом (zip-файлом), содержащим:

  • файл дополнительного отчета или обработки;
  • xml-файл манифеста, в котором находится дополнительная метаинформация, необходимая для публикации дополнительного отчета или обработки в сервисе.

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

  • файл дополнительного отчета или обработки или наличие дополнительного отчета или обработки в справочнике Дополнительные отчеты и обработки локальной информационной базы, в которой выполняется подготовка;
  • файл помощника подготовки дополнительных отчетов и обработок к публикации в модели сервиса ПодготовкаДополнительныхОтчетовИОбработокКПубликацииВМоделиСервиса.epf.

4. Создание комплекта поставки

Чтобы подготовить комплект поставки, нужно выполнить следующие действия.

  1. Войти в локальную информационную базу в качестве пользователя с административными правами.
  2. Открыть файл внешней обработки ПодготовкаДополнительныхОтчетовИОбработокКПубликацииВМоделиСервиса.epf с помощью меню:

  3. В выведенном окне помощника создания комплекта поставки указать, из какого источника требуется подготовить комплект поставки — из файла на диске или из справочника Дополнительные отчеты и обработки, — и затем нажать кнопку Далее.

  4. Выбрать дополнительный отчет или обработку (файл с расширением epf или erf расположенный на жестком диске локального компьютера или элемент справочника Дополнительные отчеты и обработки).
  5. На следующем шаге помощника необходимо проверить, верно ли указаны реквизиты дополнительного отчета или обработки. Если все верно, следует нажать кнопку Далее. Если загружается новая версия существующего отчета или существующей обработки, то особое внимание следует обратить на правильность номера версии.

  6. На следующем шаге помощника создания комплекта поставки нужно указать, в каком месте интерфейса приложения может располагаться команда для вызова дополнительного отчета или обработки.

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

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

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

      Для дополнительного отчета или обработки, которые должны быть работоспособны в нескольких конфигурациях, нужно выбирать только те разделы или объекты, которые присутствуют во всех конфигурациях, для которых предполагается публиковать отчет или обработку.

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

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

  9. На последнем шаге мастера следует нажать гиперссылку Сохранить комплект поставки на диск, сохранить полученный zip-файл и затем нажать в окне мастера кнопку Готово.


См. также:

Что это и как его открыть?

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

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


Совет: Если при попытке открыть файл ERF вы получаете сообщение об ошибке, связанной с .SYS file, проблема, вероятно, может быть связана с поврежденными или устаревшими драйверами устройств, которые необходимо обновить. Данный процесс можно облегчить посредством использования программного обеспечения для обновления драйверов, такого как DriverDoc.

Описание формата файлов конфигурации (CF, EPF, ERF)

Внутренняя структура файла конфигурации (*.cf) давно не является секретом, однако подробной документации на него в сети практически нет. Данная статья является попыткой восполнить этот пробел.

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

Однако, хорошей, добротной документации на этот формат, к сожалению, совсем немного. На написание данной статьи меня надоумила публикация глубокоуважаемого awa, который подробно, во всех деталях описал структуру формата файловой ИБ 1С:Предприятия (*.1CD).

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

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

Предыстория

Как уже говорилось выше, структура формата давно известна и в сети есть информация по его структуре (хотя, довольно скудная). Мне эта информация понадобилась при разработке программы V8Viewer, работая над которой, я опирался на следующие материалы:
  • http://infostart.ru/public/15695/, автор  brix8x
  • http://www.richmedia.us/post/2011/01/18/cf-file-format-1c-8-compatible.aspx, если не ошибаюсь, автор – Elisy
  • http://infostart.ru/public/15867/, автор awa
Хочется выразить благодарность авторам, за то, что поделились информацией с народом.

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

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

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

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

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

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

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

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

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

Структура контейнера

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

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

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

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

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

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

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

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

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

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

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

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

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

Оглавление контейнера

Теперь, когда все составные части озвучены, осталось рассмотреть, пожалуй, самый главный документ контейнера – документ оглавления, в котором указано расположение всех файлов контейнера. Как говорилось выше, документ оглавления это самый первый документ контейнера и он идет сразу же за заголовком контейнера.

Оглавление представляет собой массив записей, каждая из которых указывает на файл. Поскольку, файл состоит их двух документов (атрибуты и содержимое), то запись оглавления указывает на оба из них. Запись оглавления представляет собой три числа INT32:

  1. Адрес (смещение в файле) документа атрибутов
  2. Адрес (смещение в файле) документа содержимого
  3. Число 0x7fffffff (маркер конца записи).

Напоминаю, что каждый документ может быть разбит на блоки (фрагментирован). Алгоритм сборки документа из блоков будет рассмотрен ниже.

Запись оглавления представляет собой 2 значащих числа INT32. Первое число – это адрес документа атрибутов файла. По этому адресу мы попадем на начало 1-го блока документа атрибутов. Из документа атрибутов мы можем узнать имя файла. Второе число – адрес документа содержимого файла. По этому адресу мы попадем на начало 1-го блока документа содержимого, откуда будем читать непосредственно данные файла.

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

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

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

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

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

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

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

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

Давайте уже пощупаем байты

Итак, настало время рассмотреть, как конкретно устроены все упомянутые выше сущности.

Основным способом чтения данных из контейнера является чтение цепочки блоков, составляющих те или иные документы. Кажется, что правильно будет начать с принципа чтения блочных документов.

Чтение документа по блокам

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

Итак, заголовок блока представляет собой строку длиной 31 байт. Строка эта имеет следующий вид:

[CRLF][Размер всего документа][Пробел][Размер текущего блока][Пробел][Адрес следующего блока][CRLF], где:

  • CRLF – стандартный перевод строки Windows, пара символов rn (0x0D,0x0A)
  • Размер всего документа – общая длина документа в байтах. Записана в виде строкового представления hex-числа. Длина – 8 байт.
  • Пробел – пробел. Символ 0x20
  • Размер текущего блока – длина тела блока в байтах. Записана также в виде строкового представления числа INT32 в hex-формате. Если документ состоит из единственного блока, то размер всего документа либо меньше, либо совпадает с размером текущего блока (что логично)
  • Адрес следующего блока – адрес по которому расположен очередной блок документа. Если адрес следующего блока равен INT_MAX, то это значит, что следующего блока нет. Адрес следующего блока также записан в виде строкового представления числа.
Сразу за заголовком блока идет тело блока, которое имеет длину, указанную в поле «Размер текущего блока».

Рассмотрим рисунок: длина всего документа составляет 0x54 байта, красной рамкой выделены эти 0x54 байта. Это данные документа. Длина блока составляет 0x200 байт, т.е. больше чем длина самого документа. По этой причине остальные данные блока составляют "нули" неиспользуемого пространства. Значащие байты - это те, которые отмечены красной рамкой.

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

Чтение необходимо продолжать до тех пор, пока в поле «Адрес следующего блока» не встретится значение 0x7fffffff или пока не будет считано количество байт, указанное в поле «Размер всего документа».

Поле «Размер всего документа» имеет смысл только для первого блока. Во всех последующих блоках документа оно имеет значение 0x00000000.

Формат заголовка контейнера

Заголовок контейнера имеет длину 16 байт и состоит из следующих полей:
ПолеТипПояснение
Адрес первого свободного блока INT32 (4 байта) Смещение, по которому начинается цепочка свободных блоков
Размер блока по умолчанию INT32 (4 байта) Блок может иметь произвольную длину, но значение по умолчанию можно использовать для добавления новых блоков, например.
Поле неизвестного назначения (см. комментарии к статье) Часто совпадает с количеством файлов в контейнере INT32 (4 байта) Число, отражающее некоторую величину, как правило, совпадающую с количеством файлов в контейнере, однако, коллеги в комментариях считают, что это не совсем так. На алгоритм интерпретации контейнера данное число никак не влияет, его можно игнорировать.
Зарезервированное поле INT32 (4 байта) Всегда равно 0 (всегда ли?)

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

Оглавление содержит перечень указателей на файлы, размещенные в контейнере
ПолеТипПояснение
Адрес документа атрибутов INT32 (4 байта) Адрес документа атрибутов файла
Адрес документа содержимого INT32 (4 байта) Адрес документа содержимого файлов
Зарезервированное поле INT32 (4 байта) Всегда равно 0x7fffffff

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

Документ атрибутов описывает имя файла и даты его создания/изменения. 
ПолеТипПояснение
Время создания файла UINT64 (8 байт) Время создания файла, выраженное в количестве 100-микросекундных интервалов, прошедших с начала нашей эры (01.01.0001 00:00:00)
Время изменения файла UINT64 (8 байт) Аналогично
Зарезервированное поле INT32 (4 байта) Всегда равно 0. Возможно, это флаги атрибутов, что-то вроде «только чтение», «скрытый» и т.п. Однако, я не встречал файлов, где это поле бы отличалось от нуля.
Имя файла Строка в формате UTF-16 Занимает все оставшееся тело документа (за вычетом 2-х дат и резервного поля)

Принцип чтения контейнера

Для того, чтобы прочитать контейнер мы должны сделать следующие вещи:

Чтение оглавления

  1. Собрать из блоков документ оглавления и прочитать его
  2. Обойти все записи в документе оглавления и прочитать документы атрибутов (имена) файлов контейнера
  3. Сопоставить каждому полученному имени адрес документа содержимого
  4. На выходе получается соответствие «Имя файла» -> «Адрес содержимого»

Чтение файлов

  1. По имени файла получить из оглавления адрес документа содержимого
  2. Собрать из блоков документ содержимого
  3. Если это корневой контейнер, то распаковать документ содержимого (он сжат)
  4. Готово. Полученный результат является данными искомого файла.

Обновление от 25.02.2014

В статью внесены правки, рекомендованные awa в комментариях.

В заключение

Данная статья не является истиной в последней инстанции, вероятно, в ней есть даже ошибки. Тем не менее, если данная тема Вам интересна, то я надеюсь, что эта статья поможет вам в реализации ваших проектов. Удачи!

Работа с файловой системой в языке 1С 8.3, 8.2 (в примерах)

&НаСервере Процедура ЧтениеИЗаписьФайловНаСервере()       /// Как записать произвольное значение в файл в 1с 8.3, 8.2   // любое сериализуемое (то есть превращаемое // в строку и обратно) значение можно сохранять // в файл, например, массивы, списки значений, строки // структуры и т.д. Числа = Новый Массив; Числа.Добавить(35); Числа.Добавить(67); ЗначениеВФайл("c:\числа.txt", Числа); // эта функция работает только на сервере       /// Как восстановить произвольное значение из файла в 1с 8.3, 8.2   ЧислаИзФайла = ЗначениеИзФайла("c:\числа.txt"); Сообщить(ЧислаИзФайла[0]); // 35 Сообщить(ЧислаИзФайла[1]); // 67       /// Как записать текстовый файл в 1с 8.3, 8.2   // работает как на сервере, так и на клиенте Текст = Новый ЗаписьТекста( "c:\привет.txt", // имя КодировкаТекста.ANSI, // кодировка Символы.ПС, // разделитель строк (необ.) Ложь // перезаписывать файл, а не дописывать в конец (необ.) ); Текст.ЗаписатьСтроку("Добро пожаловать!"); Текст.ЗаписатьСтроку("Посторонним вход воспрещен."); Текст.Закрыть();       /// Как прочитать текстовый файл в 1с 8.3, 8.2   // работает как на сервере, так и на клиенте Текст = Новый ЧтениеТекста( "c:\привет.txt", // имя КодировкаТекста.ANSI, // кодировка Символы.ПС, // разделитель строк (необ.) , Истина // монопольный режим (необ.) );   // читаем пока есть что читать Пока Истина Цикл Строка = Текст.ПрочитатьСтроку(); Если Строка = Неопределено Тогда Прервать; Иначе Сообщить(Строка); КонецЕсли; КонецЦикла;   КонецПроцедуры   &НаКлиенте Процедура ОперацииНадФайлами(Команда)   // для тестов создадим пустой файл   Текст = Новый ЗаписьТекста("c:\file_src.txt"); Текст.Закрыть();       /// Как проверить существование файла в 1С 8.3, 8.2   ФайлНаДиске = Новый Файл("c:\file_src.txt"); Если ФайлНаДиске.Существует() Тогда Сообщить("c:\file_src.txt существует"); КонецЕсли;       /// Как скопировать файл в 1с 8.3, 8.2   КопироватьФайл( "c:\file_src.txt", // что копируем "c:\file_dest.txt" // куда копируем ); // перезапишет, если уже есть такой файл       /// Как переместить файл в 1с 8.3, 8.2   ПереместитьФайл( "c:\file_dest.txt", "c:\file_new.txt" ); // перезапишет, если уже есть такой файл       /// Как найти файлы в каталоге в 1с 8.3, 8.2   // возвращает массив значений типа Файл МассивНайденныхФайлов = НайтиФайлы( "c:\", // где искать "*.txt", // маска поиска Ложь // если Истина, то будет искать и в подкаталогах );   Для Каждого Файл Из МассивНайденныхФайлов Цикл Сообщить("Найден " + Файл.ПолноеИмя); КонецЦикла;       /// Как удалить файл в 1с 8.3, 8.2   // если файл readonly - будет ошибка УдалитьФайлы( "c:\file_new.txt" );       /// Как удалить файлы в каталоге по маске в 1с 8.3, 8.2   // поиск в каталоге нерекурсивный УдалитьФайлы( "c:\helpme1c", // заведомо не существующий каталог "*.txt" // маска для поиска удаляемых файлов ); // если опустить маску, то удалятся все файлы и каталог       /// Как получить имя временного файла в 1с 8.3, 8.2   Сообщить( ПолучитьИмяВременногоФайла() ); // например, c:\Temp\v8_11AE_4.tmp   Сообщить( ПолучитьИмяВременногоФайла(".txt") ); // например, c:\Temp\v8_11AE_5.txt       /// Как прочитать атрибуты файла в 1с 8.3, 8.2   Ф = Новый Файл("c:\file_src.txt");   // время последнего изменения файла Сообщить(Ф.ПолучитьВремяИзменения());   // проверяем атрибут только чтение Сообщить(Ф.ПолучитьТолькоЧтение());   // проверяем атрибут hidden (скрытность, невидимость) Сообщить(Ф.ПолучитьНевидимость());       /// Как установить атрибуты файла в 1с 8.3, 8.2   // меняем время последнего изменения файла Ф.УстановитьВремяИзменения(ТекущаяДата());   // меняем атрибут только чтение Ф.УстановитьТолькоЧтение(Ложь);   // меняем атрибут невидимости Ф.УстановитьНевидимость(Ложь);       /// Как узнать размер файла в 1с 8.3, 8.2   Сообщить(Ф.Размер()); // в байтах   // Как узнать по пути файл это или каталог в 1с 8.3, 8.2 Если Ф.ЭтоКаталог() Тогда Сообщить("Это каталог"); ИначеЕсли Ф.ЭтоФайл() Тогда Сообщить("Это файл"); КонецЕсли;       /// Как вытащить расширение файла из его пути в 1с 8.3, 8.2   Сообщить(Ф.Расширение); // .txt       /// Как вытащить имя файла без расширения в 1с 8.3, 8.2   Сообщить(Ф.ИмяБезРасширения); // file_src   КонецПроцедуры   &НаКлиенте Процедура ОперацииНадКаталогами(Команда)       /// Как создать каталог в 1с 8.3, 8.2   // каталог может уже существовать СоздатьКаталог("c:\new_dir");   // создадутся все подкаталоги СоздатьКаталог("c:\new_dir\2\3");       /// Как проверить существование каталога в 1с 8.3, 8.2   КаталогНаДиске = Новый Файл("c:\new_dir"); Если КаталогНаДиске.Существует() Тогда Сообщить("Папка c:\new_dir существует"); КонецЕсли;       /// Как удалить каталог вместе с содержимым в 1с 8.3, 8.2   УдалитьФайлы("c:\new_dir"); // мы опустили маску, поэтому удалятся все файлы // внутри каталога, а также сам каталог       /// Как получить каталог временных файлов в 1с 8.3, 8.2   Сообщить( КаталогВременныхФайлов() ); // например, c:\temp   КонецПроцедуры   &НаКлиенте Процедура РаботаСВременнымХранилищем(Команда)   // временное хранилище - объект, в который мы можем помещать // и считывать данные произвольного типа, // доступ к которому есть и на сервере и на клиенте // это позволяет передавать между сервером и клиентом // данные, которые иначе не передать       /// Как сохранить произвольное значение во временное     /// хранилище в 1с 8.3, 8.2   Список = Новый СписокЗначений; Список.Добавить("Владивосток"); Список.Добавить("Хабаровск"); Список.Добавить("Петропавловск-Камчатский");   АдресВХранилище = ПоместитьВоВременноеХранилище( Список // произвольные данные );       /// Как прочитать произвольное значение из временного     /// хранилища в 1с 8.3, 8.2   СписокИзХранилища = ПолучитьИзВременногоХранилища(АдресВХранилище); Если СписокИзХранилища = Неопределено Тогда Сообщить("Значение по этому адресу уже удалено из хранилища."); Иначе Сообщить(СписокИзХранилища[0]); // Владивосток КонецЕсли;       /// Как перезаписать уже сохраненное значение во временном     /// хранилище в 1с 8.3, 8.2   Массив = Новый Массив; Массив.Добавить(10); Массив.Добавить(20);   ПоместитьВоВременноеХранилище( Массив, АдресВХранилище );       /// Сколько времени хранится значение, сохраненное во     /// временном хранилище в 1с 8.3, 8.2   // всё зависит от второго параметра функции ПоместитьВоВременноеХранилище   // #1 если туда в качестве адреса был передан уникальный идентификатор формы // или уже существующий адрес в хранилище, то значение будет автоматически // удалено после закрытия формы   // #2 если туда в качестве адреса передан уникальный идентификатор, не // являющийся уникальным идентификатором формы, то значение будет // автоматически удалено только после завершения сеанса пользвоателя   // #3 если адрес не указан, помещенное значение будет удалено после // очередного запроса сервера   // см. примеры ниже       /// Как сохранить значение во временное хранилище на всё     /// время жизни формы в 1с 8.3, 8.2   ПоместитьВоВременноеХранилище( Массив, ЭтаФорма.УникальныйИдентификатор );       /// Как сохранить значение во временное хранилище на всё     /// время сеанса пользователя в 1с 8.3, 8.2   АдресВХранилище = ПоместитьВоВременноеХранилище( Массив, Новый УникальныйИдентификатор );       /// Как удалить значение из временного хранилища в 1с 8.3, 8.2   УдалитьИзВременногоХранилища(АдресВХранилище);       /// Как узнать является ли строка адресом во временном хранилище     /// в 1с 8.3, 8.2   Если ЭтоАдресВременногоХранилища(АдресВХранилище) Тогда Сообщить("Да, это адрес во временном хранилище."); КонецЕсли;   КонецПроцедуры   /// Как передать файл с клиента на сервер в 1с 8.3, 8.2   &НаКлиенте Процедура ПередачаФайлаСКлиентаНаСервер(Команда)   // создадим тестовый файл для передачи Текст = Новый ЗаписьТекста("c:\test.txt"); Текст.ЗаписатьСтроку("Привет,"); Текст.ЗаписатьСтроку("Мир!"); Текст.Закрыть();   ОповещениеОЗавершении = Новый ОписаниеОповещения( "ВыполнитьПослеПомещенияФайла", ЭтотОбъект );   НачатьПомещениеФайла( ОповещениеОЗавершении, , // адрес в хранилище "c:\test.txt", // имя файла Ложь, // интерактивно ЭтаФорма.УникальныйИдентификатор ); // если опустить последний параметр, то помещенный файл // будет удален после очередного запроса сервера // а если указать - то только после удаления объекта формы   // если нужно предоставить пользователю возможность // выбрать файл самому четвёртый параметр (интерактивно) // нужно установить в Истина   КонецПроцедуры   &НаКлиенте Процедура ВыполнитьПослеПомещенияФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт   Если Результат Тогда   // сохраним полученный адрес в реквизит формы АдресФайлаВХранилище = Адрес;   Сообщить( "Наконец-то! Файл " + ВыбранноеИмяФайла + " передан на сервер и сохранён во " + "временном хранилище по адресу " + Адрес);   Иначе   Сообщить("Не удалось передать файл на сервер.");   КонецЕсли;   КонецПроцедуры   /// Как прочитать файл на сервере из временного хранилища /// в 1с 8.3, 8.2   &НаСервере Процедура ПрочитатьФайлНаСервереИзХранилищаНаСервере()   Если АдресФайлаВХранилище = "" Тогда Сообщить("Сначала нужно передать файл с клиента на сервер."); Возврат; КонецЕсли;   ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайлаВХранилище);   Если ДвоичныеДанные = Неопределено Тогда Сообщить("Похоже файл уже был удалён из хранилища."); Возврат; КонецЕсли;   ДвоичныеДанные.Записать("c:\server.txt");   Текст = Новый ЧтениеТекста("c:\server.txt"); Пока Истина Цикл Строка = Текст.ПрочитатьСтроку(); Если Строка = Неопределено Тогда Прервать; Иначе Сообщить(Строка); КонецЕсли; КонецЦикла;   КонецПроцедуры   /// Как передать файл с сервера на клиент в 1с 8.3, 8.2   &НаКлиенте Процедура ПередатьФайлССервераНаКлиент(Команда)   Если АдресФайлаВХранилище = "" Тогда Сообщить("Сначала нужно сохранить файл на сервере."); Сообщить("Воспользуйтесь кнопкой 'Передача файла с клиента...'"); Возврат; КонецЕсли;   ОповещениеОЗавершении = Новый ОписаниеОповещения( "ВыполнитьПослеПолученияФайлов", ЭтотОбъект );   ПолучаемыеФайлы = Новый Массив; ПолучаемыеФайлы.Добавить( Новый ОписаниеПередаваемогоФайла( "c:\from_server.txt", // куда сохранять на клиента АдресФайлаВХранилище // адрес в хранилище на сервере ) );   НачатьПолучениеФайлов( ОповещениеОЗавершении, ПолучаемыеФайлы, , Ложь // интерактивно );   КонецПроцедуры   &НаКлиенте Процедура ВыполнитьПослеПолученияФайлов(ПолученныеФайлы, ДополнительныеПараметры) Экспорт   Для Каждого Файл Из ПолученныеФайлы Цикл Сообщить("Получен " + Файл.Имя + " из " + Файл.Хранение); КонецЦикла;   КонецПроцедуры   /// Скачать и выполнить эти примеры на компьютере

Как открыть файл ERF?

Формат RAW камеры Epson
  • Разработчик

    EPSON

  • Категория

  • Популярность

Что такое файл ERF?

ERF - это расширение файла, обычно связанное с файлами формата Epson Camera RAW.Спецификация формата Epson Camera RAW была создана EPSON. Файлы ERF поддерживаются программными приложениями, доступными для устройств под управлением Linux, Windows. Файлы с расширением ERF относятся к категории файлов Misc Files. Подмножество Misc Files включает 5685 файлов различных форматов. Пользователям рекомендуется использовать программное обеспечение Zoner Photo Studio для управления файлами ERF, хотя 5 других программ также могут обрабатывать этот тип файлов. Программное обеспечение под названием Zoner Photo Studio было создано ZONER, Inc .. Чтобы найти более подробную информацию о программном обеспечении и файлах ERF, посетите официальный сайт разработчика.

Программы, поддерживающие расширение файла ERF

В следующем списке перечислены программы, совместимые с файлами ERF, которые разделены на 3 категории в зависимости от операционной системы, в которой они доступны. Файлы с расширением ERF, как и любые другие форматы файлов, можно найти в любой операционной системе. Рассматриваемые файлы могут быть переданы на другие устройства, будь то мобильные или стационарные, но не все системы могут правильно обрабатывать такие файлы.

Программы, обслуживающие файл ERF

Windows Linux

Как открыть файл ERF?

Может быть несколько причин, по которым у вас могут быть проблемы с открытием файлов ERF в данной системе.С другой стороны, наиболее часто встречающиеся проблемы, связанные с файлами Epson Camera RAW Format , не являются сложными. В большинстве случаев их можно решить быстро и эффективно без помощи специалиста. Ниже приводится список рекомендаций, которые помогут вам выявить и решить проблемы, связанные с файлами.

Шаг 1. Установите программу Zoner Photo Studio

Проблемы с открытием файлов ERF и работой с ними, скорее всего, связаны с отсутствием надлежащего программного обеспечения, совместимого с файлами ERF на вашем компьютере.Эту проблему можно решить, загрузив и установив Zoner Photo Studio или другую совместимую программу, такую ​​как Adobe Photoshop, ACDSee Photo Manager, Adobe Photoshop Camera Raw. Выше вы найдете полный список программ, поддерживающих файлы ERF, классифицированных по системным платформам, для которых они доступны. Один из самых безопасных способов загрузки программного обеспечения - использование ссылок, предоставленных официальными дистрибьюторами. Посетите веб-сайт Zoner Photo Studio и загрузите установщик.

Шаг 2.Проверьте версию Zoner Photo Studio и при необходимости обновите

Если проблемы с открытием файлов ERF по-прежнему возникают даже после установки Zoner Photo Studio , возможно, у вас устаревшая версия программного обеспечения. Проверьте веб-сайт разработчика, доступна ли более новая версия Zoner Photo Studio. Разработчики программного обеспечения могут реализовать поддержку более современных форматов файлов в обновленных версиях своих продуктов. Если у вас установлена ​​более старая версия Zoner Photo Studio, она может не поддерживать формат ERF.Самая последняя версия Zoner Photo Studio обратно совместима и может работать с форматами файлов, поддерживаемыми более старыми версиями программного обеспечения.

Шаг 3. Установите приложение по умолчанию для открытия файлов ERF на Zoner Photo Studio

Если у вас установлена ​​последняя версия Zoner Photo Studio, но проблема не устранена, выберите ее в качестве программы по умолчанию, которая будет использоваться для управления ERF на вашем устройстве. Процесс связывания форматов файлов с приложением по умолчанию может отличаться в деталях в зависимости от платформы, но основная процедура очень похожа.

Измените приложение по умолчанию в Windows

  • Выберите пункт «Открыть с помощью» в меню файла, доступном при щелчке правой кнопкой мыши по файлу ERF.
  • Выберите Выбрать другое приложение → Другие приложения
  • Чтобы завершить процесс, выберите Искать другое приложение на этом ПК и с помощью проводника файлов выберите папку установки Zoner Photo Studio. Подтвердите, установив флажок Всегда использовать это приложение для открытия файлов ERF и нажав кнопку ОК.

Измените приложение по умолчанию в Mac OS

  • Щелкните правой кнопкой мыши файл ERF и выберите Информация
  • Откройте раздел Открыть с помощью, щелкнув его имя
  • Выберите соответствующее программное обеспечение и сохраните настройки, нажав кнопку «Изменить все».
  • Должно появиться окно с сообщением, что Это изменение будет применено ко всем файлам с расширением ERF .Нажимая «Продолжить», вы подтверждаете свой выбор.
Шаг 4. Убедитесь, что файл ERF заполнен и не содержит ошибок

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

1. ERF может быть заражен вредоносным ПО - обязательно проверьте его антивирусом.

Если ERF действительно заражен, возможно, вредоносное ПО блокирует его открытие. Немедленно просканируйте файл с помощью антивирусного инструмента или просканируйте всю систему, чтобы убедиться, что вся система в безопасности. Если файл ERF действительно заражен, следуйте приведенным ниже инструкциям.

2. Убедитесь, что структура файла ERF не повреждена

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

3. Убедитесь, что у вас есть соответствующие права доступа

Иногда для доступа к файлам пользователю требуются права администратора. Переключитесь на учетную запись с необходимыми привилегиями и попробуйте снова открыть файл Epson Camera RAW Format.

4. Убедитесь, что в системе достаточно ресурсов для запуска Zoner Photo Studio

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

5. Убедитесь, что у вас установлены последние версии драйверов, а также системные обновления и исправления.

Последние версии программ и драйверов могут помочь вам решить проблемы с файлами Epson Camera RAW Format и обеспечить безопасность вашего устройства и операционной системы.Возможно, файлы ERF правильно работают с обновленным программным обеспечением, которое устраняет некоторые системные ошибки.

Хотите помочь?

Если у вас есть дополнительная информация о файле ERF, мы будем благодарны, если вы поделитесь ею с нашими пользователями. Для этого воспользуйтесь формой здесь и отправьте нам свою информацию о файле ERF.

.

Создание, открытие, чтение, запись и закрытие файла

  • Home
  • Testing

      • Back
      • Agile Testing
      • BugZilla
      • Cucumber
      • Database Testing
      • ETL Testing
      • ETL
      • Назад
      • JUnit
      • LoadRunner
      • Ручное тестирование
      • Мобильное тестирование
      • Mantis
      • Почтальон
      • QTP
      • Назад
      • SAP
      • 00030003 Центр контроля качества
      • SoapUI
      • Управление тестированием
      • TestLink
  • SAP

      • Назад
      • ABAP
      • APO
      • Начинающий
      • Basis
      • BODS
      • BI
      • BPC
      • CO
      • Назад
      • CRM
      • Crystal Reports
      • QM4000
      • QM4
      • Заработная плата
      • Назад
      • PI / PO
      • PP
      • SD
      • SAPUI5
      • Безопасность
      • Менеджер решений
      • Successfactors
      • Учебники SAP

    • Apache
    • AngularJS
    • ASP.Net
    • C
    • C #
    • C ++
    • CodeIgniter
    • СУБД
    • JavaScript
    • Назад
    • Java
    • JSP
    • Kotlin
    • Linux
    • Linux
    • Kotlin
    • Linux
    • js
    • Perl
    • Назад
    • PHP
    • PL / SQL
    • PostgreSQL
    • Python
    • ReactJS
    • Ruby & Rails
    • Scala
    • SQL
    • 000 0003 SQL 000
    • SQL
    • 000
    • UML
    • VB.Net
    • VBScript
    • Веб-службы
    • WPF
  • Обязательно учите!

      • Назад
      • Бухгалтерский учет
      • Алгоритмы
      • Android
      • Блокчейн
      • Бизнес-аналитик
      • Создание веб-сайта
      • Облачные вычисления
      • COBOL
      • Встроенные системы
      • 0003
      • 9000 Эталонный дизайн
      • 900 Ethical
      • Учебные пособия по Excel
      • Программирование на Go
      • IoT
      • ITIL
      • Jenkins
      • MIS
      • Сеть
      • Операционная система
      • Назад
      • Prep
      • Управление проектом
      • Prep
      • PM Salesforce
      • SEO
      • Разработка программного обеспечения
      • VBA
      900 04
  • Большие данные

      • Назад
      • AWS
      • BigData
      • Cassandra
      • Cognos
      • Хранилище данных
      • DevOps Back
      • DevOps Back
      • HBase
        • HBase2
        • MongoDB
        • NiFi
    .

    Как открывать, писать, читать и закрывать файлы в C ++