вторник, 24 января 2017 г.

Удаление заблокированных файлов 1С+Unlocker

Решая задачу удаления файлов с диска, из 1С, мы можем столкнуться с такой проблемой - файл, который нужно удалить, может быть заблокирован другой программой или службой.
Казалось бы, что всё просто. Пусть пользователь закроет приложение, которое мешает...




Но что если вмешательство пользователя не то, чтобы нежелательно, а просто невозможно.
Помочь может маленькая, но очень полезная программа
Unlocker
В ней реализована возможность работы через командную строку.
Параметры командной строки Unlocker:

Через командную строку можно передать путь к файлу или путь к списку файлов, которые необходимо удалить. Удаление можно производить в "тихом" режиме.
Устанавливаем Unlocker и остается только реализовать вызов нужной команды  из 1С:
Процедура ОчиститьКаталогВременныхФайловПередСканированием(Путь = "" //Список файлов в каталоге пользователя МассивФайлов = НайтиФайлы(Путь, "*"); Файл = Неопределено; СписокФайловНаУдаление = Неопределено; //Создадим список удаляемых файлов Для Каждого ФайлКаталога Из МассивФайлов Цикл Если СписокФайловНаУдаление = Неопределено Тогда //Во временном файле будем хранить список файлов на удаление СписокФайловНаУдаление=ПолучитьИмяВременногоФайла("txt"); Файл = Новый ЗаписьТекста(СписокФайловНаУдаление,КодировкаТекста.ANSI); КонецЕсли; Файл.ЗаписатьСтроку(ФайлКаталога.ПолноеИмя); КонецЦикла; Если Файл = Неопределено Тогда Возврат; КонецЕсли; Файл.Закрыть(); Попытка //ЗАПУСКАЕМ UNLOCKER - Удаление //L - удалять файлы по списку внутри текстового файла //D - режим удаления //S - тихий режим (без открытия программного интерфейса) //ВАЖНО! Unlocker корректно удаляет файлы только в том случае если в Пути к файлам НЕТ пробелов КомандаУдаление = """C:\Program Files\Unlocker\Unlocker.exe"" " + СписокФайловНаУдаление + " /L /D /S"; #Если Клиент Тогда КомандаСистемы(КомандаУдаление); #Иначе WshShell=Новый COMОбъект("Wscript.Shell"); WshShell.run(КомандаУдаление); #КонецЕсли Исключение //ДОБАВИТЬ КОД ОБРАБОТКИ ОШИБКИ КонецПопытки; КонецПроцедуры
В данную процедуру достаточно передать путь к папке, которую нужно почистить.

Комментариев нет:

Отправить комментарий