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

  1. 9 г. назад

    Приветствую. Помогите пожалуйста программно за архивировать файл, а потом и распаковать. Нужно все это реализовать в 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) а в чем проблема-то? или последние винды не умеют досовские команды в цмд обрабатывать?...

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