&НаКлиенте
Процедура Команда1(Команда)
ПутьКZip = "c:\Users\user1\Documents\Архивы\";
КаталогТемп = КаталогВременныхФайлов();
//Получим список архивов
МассивФайловZip = НайтиФайлы(ПутьКZip, "*.zip");
Для Каждого ТекФайлZip Из МассивФайловZip Цикл
ЧтениеZip = Новый ЧтениеZipФайла(ТекФайлZip.ПолноеИмя);
Для Каждого ТекЭлемент Из ЧтениеZip.Элементы Цикл
ЧтениеZip.Извлечь(ТекЭлемент, КаталогТемп);
ЧтениеZip.Закрыть();
УдалитьФайлы(ТекФайлZip.ПолноеИмя);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Показать
Однако в результате получаю ошибку:
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(20)}: Ошибка при вызове метода контекста (УдалитьФайлы): Ошибка удаления файлов: Ошибка совместного доступа к файлу 'c:\Users\user1\Documents\Архивы\Архив1.zip'. 32(0x00000020): Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.
Вы же закрываете чтение и пытаетесь удалить файл внутри архива.
Вообще пользуйтесь методом ИзвлечьВсе()
ИТС пример
Сообщить("Распаковка файла - " + ИмяАрхивногоФайла);
Сейчас = ТекущаяДата();
// Откроем файл для чтения
ЧтениеZIP = Новый ЧтениеZipФайла(ИмяАрхивногоФайла,
ПарольАрхивногоФайла);
// Сообщим комментарий архива
Сообщить("Комментарий:");
Сообщить(ЧтениеZIP.Комментарий);
// Распакуем все файлы из архива
ЧтениеZIP.ИзвлечьВсе(ПапкаНазначения, РежимВосстановленияПутейФайловZIP.НеВосстанавливать);
// Распакуем файлы по одиночке
Для Каждого Элемент Из ЧтениеZIP.Элементы Цикл
Сообщить("Распаковка файла:" + Элемент.ПолноеИмя);
ЧтениеZIP.Извлечь(Элемент,
ПапкаНазначения,
РежимВосстановленияПутейФайловZIP.Восстанавливать,
? (Элемент.Зашифрован, ПарольАрхивногоФайла, ""));
КонецЦикла;
ЧтениеZIP.Закрыть();
// Сообщим время, потребовавшееся для работы
Сообщить("Распаковка заняла " + (ТекущаяДата() - Сейчас) + " секунд(ы)");
(3) Я пытаюсь удалить сам архив. Но почему-то внутри цикла по элементам архива это невозможно, хотя чтение уже закрыто.
ИзвлечьВсе мне не оч подходит. Мне нужны только файлы с определенным расширением.