6.
A-Lex-Is
3
18.03.12 16:19
Сейчас в теме
У меня это реализовано так:
Файл = Новый Файл(ИмяФайла);
Если НЕ Файл.Существует() Тогда
Сообщить ("Файл для распаковки не найден!",СтатусСообщения.Важное);
Возврат;
КонецЕсли;
Каталог = Новый Файл(ИмяКаталога);
Если НЕ Каталог.Существует() Тогда
ИмяКаталога = Файл.Путь+Файл.ИмяБезРасширения;
КонецЕсли;
НайтиАрхиватор();
Архиватор = Новый Файл (ПутьКАрхиватору);
Если НЕ Архиватор.Существует() Тогда
Возврат;
КонецЕсли;
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("txt");
//ВременныйФайл = Новый Файл (ИмяВременногоФайла);
//кИмяВременногоФайла = ВременныйФайл.Имя;
p = ? (НЕ ПустаяСтрока(Пароль)," -p"+Пароль," -p");
СтрокаДляВыполнения = """"+ПутьКАрхиватору +""""+" " + "e " + ИмяФайла +" -aoa" +" -o" + ИмяКаталога+p+" -y"+" > "+ ИмяВременногоФайла;
//Сообщить (СтрокаДляВыполнения);
КомандаСистемы (СтрокаДляВыполнения);
АнализРезультата = Новый ЧтениеТекста(ИмяВременногоФайла,КодировкаТекста.OEM);
СписокРаспакованныхФайлов = Новый Массив();
Стр = АнализРезультата.ПрочитатьСтроку();
Пока Стр <> Неопределено Цикл
ПозСтрокаИмениФайла = Найти(Стр, "Extracting ");
Если ПозСтрокаИмениФайла Тогда
ИмяРаспакованногоФайла = Прав (Стр, СтрДлина(Стр)-СтрДлина("Extracting "));
СписокРаспакованныхФайлов.Добавить(ИмяРаспакованногоФайла);
КонецЕсли;
Стр = АнализРезультата.ПрочитатьСтроку();
КонецЦикла;
АнализРезультата = Новый ЧтениеТекста(ИмяВременногоФайла,КодировкаТекста.OEM);
Стр = АнализРезультата.ПрочитатьСтроку();
Пока Стр <> Неопределено Цикл
РезУспешно = Найти (Стр,"Everything is Ok");
Если РезУспешно Тогда
Прервать;
КонецЕсли;
Стр = АнализРезультата.ПрочитатьСтроку();
КонецЦикла;
Если РезУспешно Тогда
Предупреждение ("Все файлы распакованы успешно!");
RunApp ("explorer.exe "+ИмяКаталога);
Иначе
Предупреждение ("При распаковке файлов произошли ошибки! Подробности в служебном сообщении!");
АнализРезультата = Новый ЧтениеТекста(ИмяВременногоФайла,Кодировкатекста.OEM);
Стр = АнализРезультата.ПрочитатьСтроку();
Пока Стр <> Неопределено Цикл
НеверныйПароль = Найти(Стр,"═хюяючэрээр ю°шсър");
Если НеверныйПароль Тогда
Сообщить (СтрЗаменить(Стр,"═хюяючэрээр ю°шсър","Неверный пароль"),СтатусСообщения.Внимание);
Иначе
Сообщить (Стр,СтатусСообщения.Внимание);
КонецЕсли;
Стр = АнализРезультата.ПрочитатьСтроку();
КонецЦикла;
КонецЕсли;
Попытка
УдалитьФайлы (ИмяВременногоФайла);
Исключение
КомандаСистемы ("del "+""""+ИмяВременногоФайла+"""");
КонецПопытки;
КонецПроцедуры