gifts2017

Упаковщик двоичных файлов os7764

Опубликовал Виталий (nafa) в раздел Программирование - Практика программирования

Помещает любые файлы (драйвера, внешние компоненты, видеоролики) в конфигурацию или внешнюю обработку и обеспечивает их распаковку.

Работает так:

1. Открываете обработку

2. Указываете нужные файлы

3. Жмете "Упаковать"

4. Сформированный текст копируете в нужный модуль конфигурации или внешней обработки

ВСЕ!

5. Для распаковки необходимо вставить в модуль один вызов функции распаковки, описание функции включается в текст модуля (п. 4) автоматически.

 

Это дает удобство как разработчику, так и пользователю.

Например, в обработку импорта КЛАДР можно вложить сам классификатор. В обработку обслуживания сканера штрихкода - компоненту для работы с этим сканером. Тогда при начале работы можно проверить наличие этой компоненты в системе, и если ее нет - автоматически установить.

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

Отличительные особенности:

1. Очень просто работает, никаких лишних действий разработчика.

2. Можно упаковывать большие файлы и распаковывать их за разумное время (на Athlon64 2ГГц файл kladr.zip (12Мб) извлекается за 16 секунд).

3. Автоматически распознается наличие v7plus.dll и соответственно используются объект из этой компоненты (AddIn.V7TextFile, для больших файлов предпочтительно) или стандартный "Текст".

4. Может самостоятельно устанавливать v7plus.dll  - просто добавьте ее в таблицу файлов.

Принцип работы

Очень простой - двоичные файлы кодируются по алгоритму base64. Получается текст, который и вставляется непосредственно в любой модуль. Распаковка - наоборот, преобразует этот текст в исходный файл.

К сожалению, мне не удалось добиться от 1С понимания символа с кодом 0, поэтому пришлось использовать сторонние средства: Windows Scripting Host (WSH - встроен в Windows) и программа base64.exe (встроена в обработку) (автором разрешено использование программы в любых целях). То есть кроме ert файла с обработкой ничего дополнительно инсталлировать не надо.

Использование упакованных файлов

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

Вся подробная информация по использованию есть в справке к обработке.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Упаковщик двоичных файлов os7764
.ert 300,00Kb
18.04.10
146
.ert 300,00Kb 146 Бесплатно
Демо с упакованными файлами (ВНИМАНИЕ: размер 8 МБ)
.ert 8,21Mb
18.04.10
31
.ert 8,21Mb 31 Бесплатно

См. также

Подписаться Добавить вознаграждение

Комментарии

2. Епрст (Ёпрст) 19.04.10 10:19
+1 ну и Абрахамс кидался кодом кодирования-декодировани в base64, где-то валяется готовый код распаковки dll
3. Виталий (nafa) 19.04.10 10:49
(1) (2) Это вобще-то совершенно разные обработки. По ссылкам на проклуб - внешняя компонента для хранения двоичных данных в информационной базе. Назначение - хранение информации в существующей базе.
У меня - обычная обработка, не требующая никаких предустановленных ВК, и предназначенная для размещения файлов в конфигурацию или ert. Создаваемый модуль предназначен для работы в т.ч. когда есть только md файл и нет еще никакой информационной базы и нет никаких предустановленных ВК. (И в том числе позволяет эту ВК из MD файла сделать).
4. Епрст (Ёпрст) 19.04.10 11:34
(3) Да ё... Абрахамса код делает всё тоже что и у вас, лень искать.
Да и метода еще с 2000-х годов известна..
5. Виталий (nafa) 19.04.10 12:09
(4) Я не совсем понимаю, что не так.
1. На проклубе программа лежит по назначению и порядку применения совершенно другая, даже скачал и специально проверил.
2. Сам алгоритм base64 действительно известен давно. А применяет его кто как считает нужным.
3. Для разработки был использован готовый алгоритм base64, а также утилита base64 все остальное разработано самостоятельно и ни у кого не заимствовано.
4. Наверное есть другие программы, выполняющие действительно аналогичную функцию, но не понимаю чем плохо что будет еще одна. Есть например Internet Explorer - ничего же плохого нет в том, что появляются Mozilla, Opera, Chrome и пр. Каждый выбирает то, что ему нравится.
oninfostart; support; +2 Ответить 1
6. Епрст (Ёпрст) 19.04.10 14:07
(5) Да всё так, просто ничего нового, имхо.
7. script Мальчинко (script) 19.04.10 15:54
Зачем далеко ходить все уже давно есть на инфостарте
http://infostart.ru/public/14459/
Но с этой реализацией у меня были проблемы
При файле в 500 кб у меня 1С вообще виснет. Да и программная упаковка и распаковка нескольких файлов одновременно была бы тоже оч. полезной.
Ваша решает эти проблемы ?

а это уже мое
http://infostart.ru/public/64757/
8. Виталий (nafa) 19.04.10 17:15
(7) Максимум, что тестировал - 70Мб. Файлов можно упаковывать сразу много, блок для вставки создается один на все файлы, и распаковывать также один/по списку/все за 1 вызов функции распаковки.
При работе с большими файлами желательно, чтобы у пользователя стояло v7plus. Если вы не уверены, что оно есть у пользователя - добавьте его в список упаковываемых файлов - тогда обработка при необходимости установит его сама (т.е. никаких дополнительных вызовов делать не надо).
Также обработка использует 2 метода для распаковки (один заточен под маленький объем (до 60К) другой - под большой. Выбирает сама исходя из размера файлов. Но если идет много вызовов и в каждом распаковка одного маленького файла, то рекомендую указать, что должен использоваться метод распаковки для больших объемов - отработает быстрее (в справке написано, как это сделать). Если одним вызовом распаковываются например 100 файлов по 20К, то ничего дополнительно делать не надо.
По-поводу http://infostart.ru/public/14459/ - она не виснет из-за объема (я пробовал ее на объеме в 10 раз больше - 6Мб - проблем нет), а просто WSH непредсказуемо выдает окно о длинном выполнении скрипта, которое оказывается под рабочим окном 1С. (на которое надо просто переключиться и закрыть - тоже столкнулся) При распаковке по сути она делает просто копирование части файла и тормозить тут нечему. Но она к сожалению, не поддерживает размещение данных в md (хотя принцип наверное можно было бы применить тот же, но я не уверен, что всегда будет работать (1С может в принципе выпустить какой-нибудь новый релиз и, например, начать сжимать bmp шки (тексты модулей же жмет))). Поэтому сделал свою.
9. Виталий (nafa) 19.04.10 17:26
(7) я посмотрел - http://infostart.ru/public/64757/ - виснуть может еще из-за того, что:
Присваиваем ей имя "precomp"

Попробуйте дать идентификатор гарантированно уникальный, что-то вроде "precomp_gh4lms994mfirefe0w9f3f3fo3fj39" (т.к. слово precomp может в файле оказаться по другим причинам и в результате начало файла определиться неверно)
10. GENNADIUS O (GOOD256) 19.04.10 17:46
11. Алексей Плутенко (Noy) 20.04.10 17:13
Запаковать ничего не получилось:
При записи строки произошла ошибка : The file is open only for reading
os7764_Зт.ЗаписатьСтроку(os7764_сСтр);


Скачал "демо" - там распаковка работает, но медленно

По-поводу обработки Маляева (Размещение двоичных данных (обработок, документов, библиотек) в файле ERT) - она действительно очень медленная, но если ее чуть-чуть "допилить" то можно получить такие результаты:
Распаковка файла FormEx.dll (558'080 байт): 0.133 сек
Распаковка файла far.com.ua.xls (10'362'368 байт): 0.953 сек
Распаковка файла Snatch_Goblin.avi (47'741'596 байт): 9.149 сек

что гораздо лучше чем
kladr.zip (12Мб) извлекается за 16 секунд
12. Алексей Плутенко (Noy) 20.04.10 17:48
(11)+ попробовал не сервере (Сата2 в Рейде10) - там вообще
Распаковка файла Snatch_Goblin.avi (47'741'596 байт): 3.892 сек


боюсь запускать на SSD :)
13. Епрст (Ёпрст) 20.04.10 18:01
(11) чем допиливал обработку Маляева?

14. Алексей Плутенко (Noy) 20.04.10 18:06
(13) Просто читаю не по-байтно, а блоками по 4К
15. Епрст (Ёпрст) 20.04.10 18:09
(14) ну ясно...Мне Маляевская тоже больше радует..Ибо хранить текст в открытом виде не есть гуд, автор, например, чтоб ошибки не возникало, его на строки побил..
16. Виталий (nafa) 20.04.10 19:35
(11) Я ошибки не нашел (именно в том файле, что на сайте), и даже искусственно именно такую ошибку вызвать не смог (попробовал отключил права на запись файлов в каталоге где создается временный файл с текстом - тогда файл конечно не создается, но и ошибка соответствующая вылезает).
17. Алексей Плутенко (Noy) 20.04.10 20:36
(16) Отписал про ошибку в личку
18. Виталий (nafa) 21.04.10 11:26
(11) С ошибкой (комментарий N 11) разобрался.
Оказывается, метод ОткрытьФайл объекта AddIn.V7TextFile в разных версиях v7plus.dll вызывается по-разному! И в результате вызов в версии 6, на которой проявляется ошибка дает результат прямо противоположный версии 11, которой я пользовался: файл вместо записи открывается на чтение.
Проверил на 8й версии v7plus - нормально работает. Т.е. изменение порядка вызова произошло в 7ой ли 8ой версии.
Вывод: для работы обработки используем v7plus версии не меньше 8. Если у Вас такой нет, можно ее просто отключить - работа с файлами будет идти через объект "Текст". (Но для файлов >1Мб ее все же лучше поставить - на таких файлах "Текст" тормозит).
19. FLYYY (Flyyy) 22.04.10 16:55
Добавил 1 файл в обработку(1с.txt). При запаковке выдает ошибку:
При открытии файла произошла ошибка : Файл "C:\1c.txt.b64" не найден.
Чт.Открыть(сИмяФайла);
{C:\OS7764.ERT(680)}: Неверное имя файла!
v7plus.dll - 11 версия. В чем может быть дело?
20. Виталий (nafa) 22.04.10 20:01
(19) Я проверил именно с таким именем файла именно в каталоге c:\ - работает. Так что, вероятно - права на действия (создание файлов, запись, выполнение) в каталоге C:\
21. Tone2010 Tone2010 (Tone2010) 26.04.10 20:20
Для base64 используйте .NET

Convert.FromBase64String();
Convert.ToBase64String();

Используя интерфейс IStorage, можно к любой ert-шке присобачить любые данные без конвертации в base64.
22. Виталий (nafa) 26.04.10 23:41
(21) Идея хорошая, но .NET не у всех стоит. А в обработку его упаковывать накладно.
Base64 только для того, чтобы в 1С все работало штатными средствами, т.к. 1С не умеет обрабатывать символ с кодом 0 (может и еще какие, не проверял). Поэтому в 1С только те символы, с которыми она штатно работает, а декодирование приходится выполнять сторонними средствами.
23. bulpi bulpi (bulpi) 27.04.10 12:06
Наконец-то добрался до внимательно посмотреть обработку. Если бы можно было, поставил 10 плюсов. Мало реализовать идею, она и раньше была. Человек потрудился, чтобы было удобно чайникам, вроде меня :D
24. Денис Денин (MrDen) 29.04.10 19:36
(0) можно для распаковки попробовать также
Внешняя компонента для преобразования файлов из/в кодировку Base64 из встроенного языка 1С Предприятие
http://www.softmaker.kz/files.php?cat=8&id=24
25. Dmitry The Wing (wing) 14.07.10 07:03
(0) А чем можно открыть обработку? ни 1С, ни конфигуратор не могут ее открыть, ссылаясь на общую файловую ошибку доступа к основному потоку метаданных.

Видимо, был какой-то временный сбой - раза с 4 скачалось нормально.
26. Виталий (nafa) 14.07.10 09:57
Наверное при скачивании файл попортился. Напишите мне в личном сообщении емейл, я пришлю в архиве.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа