Приветствую. Помогите пожалуйста программно за архивировать файл, а потом и распаковать. Нужно все это реализовать в 1С 7.7
Приветствую. Помогите пожалуйста программно за архивировать файл, а потом и распаковать. Нужно все это реализовать в 1С 7.7
глянь пример с использованием DialMail.dll
//*************************** Функция ЗаархивироватьДанные() ЗагрузитьВнешнююКомпоненту("DialMail.dll"); ZIP = СоздатьОбъект("AddIn.ZIP"); Если ФС.СуществуетФайл(РабочийКаталог) = 0 тогда ФС.СоздатьКаталог(РабочийКаталог); КонецЕсли; ZIP.КаталогДобавления = РабочийКаталог; МаскаФайлов = "*.dbf"; МаскаПерФайлов = "*.per"; МаскаЛогФайлов = "log_*.txt"; ИмяФайла = СписокНастроек.Получить("ИмяФайлаНутриция"); Если ПустоеЗначение(ИмяФайла)=1 Тогда ИмяФайла = ТекущийГород; КонецЕсли; ПолныйПутьКАрхиву = ПолучитьПолноеИмяФайла(РабочийКаталог, ИмяФайла + ".zip"); ZIP.ДобавитьВАрхив( , МаскаФайлов, ПолныйПутьКАрхиву); ZIP.ДобавитьВАрхив( , МаскаПерФайлов, ПолныйПутьКАрхиву); ZIP.ДобавитьВАрхив( , МаскаЛогФайлов, ПолныйПутьКАрхиву); Если ZIP.КодОшибки = 0 Тогда ИскомыйФайл = ФС.НайтиПервыйФайл(ПолучитьПолноеИмяФайла(РабочийКаталог, МаскаФайлов)); Пока ПустоеЗначение(ИскомыйФайл) = 0 Цикл ФС.УдалитьФайл(ИскомыйФайл); ИскомыйФайл = ФС.НайтиСледующийФайл(); КонецЦикла; ИскомыйФайл = ФС.НайтиПервыйФайл(ПолучитьПолноеИмяФайла(РабочийКаталог, МаскаПерФайлов)); Пока ПустоеЗначение(ИскомыйФайл) = 0 Цикл ФС.УдалитьФайл(ИскомыйФайл); ИскомыйФайл = ФС.НайтиСледующийФайл(); КонецЦикла; ВЛогФайл("Архив сохранен в каталоге " + ПолныйПутьКАрхиву); Возврат ПолныйПутьКАрхиву; Иначе ВЛогФайл("Ошибка работы с архивами: код "+ZIP.КодОшибки+": "+ZIP.КодОшибкиСтр); Возврат ""; КонецЕсли; КонецФункции
также можно посмотреть в 1с++
BinaryData:PkZip
http://www.1cpp.ru/docum/icpp/html/BinaryData.html
пример:
Функция УпаковатьФайл(ИмяФайла,ИмяВыхФайла) КоротИмяФайла=ФС.НайтиПервыйФайл(ИмяФайла); Если ПустоеЗначение(КоротИмяФайла)=1 Тогда Сообщить("Не найден файл "+ИмяФайла,"!"); Возврат 0; КонецЕсли; ИмяКат=Лев(ИмяФайла,СтрДлина(ИмяФайла)-СтрДлина(КоротИмяФайла)); Попытка BinData=СоздатьОбъект("BinaryData"); Исключение ТекстОшибки=ОписаниеОшибки(); Сообщить("Не удалось создать объект BinaryData","!"); Сообщить("Описание ошибки: "+ТекстОшибки,"!"); Возврат 0; КонецПопытки; Попытка ФС.УстТекКаталог(ИмяКат); BinData.pkZip(""""+ИмяВыхФайла+""" """+КоротИмяФайла+""""); BinData.Закрыть(); Исключение ТекстОшибки=ОписаниеОшибки(); Сообщить("Произошла ошибка при упаковке файла!","!"); Сообщить("Описание ошибки: "+ТекстОшибки,"!"); Возврат 0; КонецПопытки; Возврат 1; КонецФункции
Не удалось создать объект BinaryData
Описание ошибки: Неудачная попытка создания объекта (BinaryData)
Произошла ошибка при упаковке файла!
Описание ошибки: Значение не представляет агрегатный объект (pkZip)
(4) 1cpp.dll нужен
помню, архивировал/разархивировал в 77 без всяких ВК с помощью батника...
(9) Верь.
Архив="c:\scripts\Моя новая папка.zip";
Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
Скрипт.language="javascript";
ФСО=СоздатьОбъект("scripting.filesystemobject");
Файл=ФСО.opentextfile(Архив,2,-1);
Скрипт.AddObject("Файл",Файл);
Скрипт.Eval("Файл.write(String.fromCharCode(80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0))");
Файл.Close();
Шел=СоздатьОбъект("shell.application");
Папка=Шел.namespace(Архив);
Папка.copyhere("c:\Temp");
Стр="Создаем архив - "+Архив;
Пока (ВвестиСтроку(Стр,Стр,СтрДлина(Стр),0,1)<>0) и (ФС.СуществуетФайл(Архив)=0) Цикл
КонецЦикла;
(9) ху из без архиватора? я же написал, использовался арж...
(12) а в чем проблема-то? или последние винды не умеют досовские команды в цмд обрабатывать?...