В последнее время на infostart идет достаточно активное обсуждение внутренних ресурсов платформы и их использование. Решил совместить просмотр всех ресурсов 1с с новыми методами работы с двоичными данными. В результате родилась обработка "Просмотр ресурсов 1с", которая при работе с файлами ресурсов использует только встроенные в платформу (8.3.9) методы. Реализовано только чтение файлов, но ничего не мешает сделать и запись. Пока таких планов нет.
Для позиционирования в файле используется объект Поток, с помощью него же читаются простые типы. Для сохранения двоичных данных используются объекты ЧтениеДанных и РезультатЧтенияДанных.
Наибольший интерес, наверно, представляют картинки, вытащенные из ресурсов. Но для понимания внутренних механизмов платформы интересны и другие ресурсы: *.f, *.lf, *.xdto и т.д.
Update2: Кардинальная переработка отображения ресурсов:
- Теперь можно анализировать ресурсы всех файлов, либо только отмеченных.
- Также добавлена возможность отбора по формату, например, отобразить только ресурсы *.epf.
- Добавлена возможность сохранения ресурсов с одновременным открытием каталога.
- Добавлена возможность открытия ресурсов epf в предприятии.
- Добавлено отображение количества файлов и ресурсов.
- Значительно увеличена скорость работы обработки.
Update: В связи с тем, что в 8.3.10 изменился формат хранения картинок (они стали в разных масштабах), реализован просмотр zip-архивов. Исправлены найденные ошибки.
Интересно.
Расскажи про скорость работы.
(1) artbear, на имеющихся ресурсных файлах практически мгновенно распаковывает.
Самый большой «8.3.9.1648inmngsrv_root.res» — 12 мегабайт — 0,411 секунды. Объемы маленькие, конечно. Так это я все распаковываю, можно ж по индексу получать только нужный ресурс, будет еще быстрее.
По-моему, недооцененная обработка.
Кстати, автор, эти файлы можно экспортировать без использования функций работы с двоичными данными.
Большинство функций 1С, использующих в качестве параметра какой-либо путь к файлу (КопироватьФайл(), Новый ДвоичныеДанные(), ВнешниеОбработки.Подключить() и т.д.), могут работать и с внутренними ресурсами:
Например, ВнутреннееИмя = «v8res://» + Родитель.ИмяРесурса + «/» + ТекущиеДанные.ИмяРесурса;
Где Родитель.ИмяРесурса — часть имени res-файла (для «8.3.9.1648inmngsrv_root.res» — «mngsrv»),
ТекущиеДанные.ИмяРесурса — имя файла ресурса
Хотелось бы видеть подобный функционал/интерфейс, как во вложении. Достаочно поискать все res-файлы в папке КаталогПрограммы().
Большинство ресурсных файлов делятся на основные и русские, последние имеют постфикс «_ru». Например, есть файлы «mngbase_root.res» и «mngbase_ru.res». В этих файлах есть ресурс «About.lf». Выполнение кода
приводит к копированию ресурса из файла ru и я пока не знаю способа, как скопировать файл из root.
К тому же, было просто интересно изучить возможности работы с двоичными данными, на тот момент они были совсем новыми.
(3) Переработал интерфейс, теперь можно анализировать хоть все ресурсные файлы сразу.
Отличная штука! Спасибо!
Отдельно хочу заметить, что распаковка в данной обработке происходит не методом КопироватьФайл(«v8res://….»), как в большинстве подобных разработок, а непосредственным чтением двоичных данных. Как результат, удается распаковать ресурсы, которые другими способами открыть не получается.