Программно заархивировать файл

  1. 8 г. назад

    Приветствую. Помогите пожалуйста программно за архивировать файл, а потом и распаковать. Нужно все это реализовать в 1С 7.7

  2. глянь пример с использованием DialMail.dll

    //***************************
    Функция ЗаархивироватьДанные() 
    	
    	ЗагрузитьВнешнююКомпоненту("DialMail.dll");
    	
    	ZIP = СоздатьОбъект("AddIn.ZIP");
    	
    	Если ФС.СуществуетФайл(РабочийКаталог) = 0 тогда
    		ФС.СоздатьКаталог(РабочийКаталог);
    	КонецЕсли;
    	
    	ZIP.КаталогДобавления = РабочийКаталог;
    
    	МаскаФайлов = "*.dbf";
    	МаскаПерФайлов = "*.per";
    	МаскаЛогФайлов = "log_*.txt";
    	
    	ИмяФайла = СписокНастроек.Получить("ИмяФайлаНутриция");
    	Если ПустоеЗначение(ИмяФайла)=1 Тогда
    		ИмяФайла = ТекущийГород;
    	КонецЕсли;
    	
    	ПолныйПутьКАрхиву = ПолучитьПолноеИмяФайла(РабочийКаталог, ИмяФайла + ".zip");
    	ZIP.ДобавитьВАрхив( , МаскаФайлов, ПолныйПутьКАрхиву);
    	ZIP.ДобавитьВАрхив( , МаскаПерФайлов, ПолныйПутьКАрхиву);
    	ZIP.ДобавитьВАрхив( , МаскаЛогФайлов, ПолныйПутьКАрхиву);
    	
    	Если ZIP.КодОшибки = 0 Тогда
    		
    		ИскомыйФайл = ФС.НайтиПервыйФайл(ПолучитьПолноеИмяФайла(РабочийКаталог, МаскаФайлов));
    		Пока ПустоеЗначение(ИскомыйФайл) = 0 Цикл
    			
    			ФС.УдалитьФайл(ИскомыйФайл);
    			ИскомыйФайл = ФС.НайтиСледующийФайл();
    			
    		КонецЦикла;
    		
    		ИскомыйФайл = ФС.НайтиПервыйФайл(ПолучитьПолноеИмяФайла(РабочийКаталог, МаскаПерФайлов));
    		Пока ПустоеЗначение(ИскомыйФайл) = 0 Цикл
    			
    			ФС.УдалитьФайл(ИскомыйФайл);
    			ИскомыйФайл = ФС.НайтиСледующийФайл();
    			
    		КонецЦикла;
    		
    		ВЛогФайл("Архив сохранен в каталоге " + ПолныйПутьКАрхиву);
    		
    		Возврат  ПолныйПутьКАрхиву;
    		
    	Иначе
    		
    		ВЛогФайл("Ошибка работы с архивами: код "+ZIP.КодОшибки+": "+ZIP.КодОшибкиСтр);
    		Возврат "";
    		
    	КонецЕсли;
    	
    КонецФункции 
    
  3. также можно посмотреть в 1с++
    BinaryData:PkZip
    http://www.1cpp.ru/docum/icpp/html/BinaryData.html

  4. пример:

    Функция УпаковатьФайл(ИмяФайла,ИмяВыхФайла)
    	
    	КоротИмяФайла=ФС.НайтиПервыйФайл(ИмяФайла);
    	Если ПустоеЗначение(КоротИмяФайла)=1 Тогда
    		Сообщить("Не найден файл "+ИмяФайла,"!");
    		Возврат 0;
    	КонецЕсли;
    	ИмяКат=Лев(ИмяФайла,СтрДлина(ИмяФайла)-СтрДлина(КоротИмяФайла));
    	
    	Попытка
    		BinData=СоздатьОбъект("BinaryData");
    	Исключение
    		ТекстОшибки=ОписаниеОшибки();
    		Сообщить("Не удалось создать объект BinaryData","!");
    		Сообщить("Описание ошибки: "+ТекстОшибки,"!");
    		Возврат 0;
    	КонецПопытки;
    	
    	Попытка
    		
    		ФС.УстТекКаталог(ИмяКат);
    		BinData.pkZip(""""+ИмяВыхФайла+""" """+КоротИмяФайла+"""");
    		BinData.Закрыть();
    		
    	Исключение
    		ТекстОшибки=ОписаниеОшибки();
    		Сообщить("Произошла ошибка при упаковке файла!","!");
    		Сообщить("Описание ошибки: "+ТекстОшибки,"!");
    		Возврат 0;
    	КонецПопытки;
    	Возврат 1;
    КонецФункции
    
  5. Не удалось создать объект BinaryData
    Описание ошибки: Неудачная попытка создания объекта (BinaryData)
    Произошла ошибка при упаковке файла!
    Описание ошибки: Значение не представляет агрегатный объект (pkZip)

    Ответы: (5)
  6. (4) 1cpp.dll нужен

  7. помню, архивировал/разархивировал в 77 без всяких ВК с помощью батника...

    Ответы: (7)
  8. (6) вспомника, на какой венде это было и в какой архивчик

    Ответы: (8)
  9. (7) вроде как на 98-й или 2000-й серверной. архивчик арж. но можно и рар...

    Ответы: (9)
  10. (8) без архиватора? не верю

    Ответы: (10) (11)
  11. 28.07.2015 09:52:58 отредактировано Идун

    (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) Цикл
    КонецЦикла;

    Ответы: (12)
  12. (9) ху из без архиватора? я же написал, использовался арж...

  13. (10) ещё раз, но теперь в arj и на 98-ой венде

    Ответы: (13)
  14. (12) а в чем проблема-то? или последние винды не умеют досовские команды в цмд обрабатывать?...

или зарегистрируйтесь чтобы ответить!