Программно скопировать файлы из одной папки в другую 1С 8.2/8.3 - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

Программно скопировать файлы из одной папки в другую 1С 8.2/8.3

Данные > Примеры кода 1С > 1С 8.3 Файлы, каталоги
Перейти в раздел примеры кода 1С 8.3:
Иногда при разработке конфигурации возникают не стандартные ситуации. Например: реализация автоматического перемещения файлов/папок или перемещение  файлов по локальной сети. Возникает вопрос - как перенести с помощью программного кода 1С 8 все файлы из одной папки в другую? Задача простая и реализуется одной процедурой в модуле объекта метаданных (Например - обработки). Ниже представлен полноценный рабочий код:
Копирование всех файлов из одного каталога в другой в 1С 8.3:
Процедура СкопироватьФайлы(Знач КаталогИсточник, Знач КаталогПриемник)

   Попытка
       //Проверим и поправим окончания пути каталогов
       Если Прав(КаталогИсточник, 1) <> "\" Тогда
           КаталогИсточник = КаталогИсточник + "\";
       КонецЕсли;
       Если Прав(КаталогПриемник, 1) <> "\" Тогда
           КаталогПриемник = КаталогПриемник + "\";
       КонецЕсли;

       //Создадим каталог приемник
       СоздатьКаталог(КаталогПриемник);
       МассивФайлов = НайтиФайлы(КаталогИсточник, "*.*", Истина);

       Для Каждого Файл Из МассивФайлов Цикл
           ПолноеИмяИсточник = Файл.ПолноеИмя;
           ПолноеИмяПриемник = КаталогПриемник + СтрЗаменить(Файл.ПолноеИмя, КаталогИсточник, "");

           Если ПустаяСтрока(Файл.Расширение) Тогда
               СоздатьКаталог(ПолноеИмяПриемник);
           Иначе
               КопироватьФайл(ПолноеИмяИсточник, ПолноеИмяПриемник);
           КонецЕсли;
       КонецЦикла;
   Исключение
       ИнфоОбОшибке = "Ошибка при копировании: " + ОписаниеОшибки()
       + " (из каталога: " + КаталогИсточник
       + "; в каталог: " + КаталогПриемник + ")";
       Если ВыдаватьСообщения Тогда
           Сообщить(ИнфоОбОшибке);
       Иначе
           Предупреждение(ИнфоОбОшибке);
       КонецЕсли;

   КонецПопытки;

КонецПроцедуры
Асинхронное копирование всех файлов из одного каталога в другой в 1С 8.3:
Асинх Процедура СкопироватьФайлыАсинх(Знач КаталогИсточник, Знач КаталогПриемник)

   КаталогПриемник = Новый Файл(КаталогПриемник);
   Если Не Ждать КаталогПриемник.СуществуетАсинх() Тогда
       Ждать СоздатьКаталогАсинх(КаталогПриемник.ПолноеИмя);
   КонецЕсли;

   МассивФайлов = Ждать НайтиФайлыАсинх(КаталогИсточник, "*.*", Ложь);
   Для Каждого Файл Из МассивФайлов Цикл
       ПолноеИмяПриемника = КаталогПриемник.ПолноеИмя + "\" + Файл.Имя;
       Если Файл.ЭтоКаталог() Тогда
           СкопироватьФайлы(Файл.ПолноеИмя, ПолноеИмяПриемника);
       Иначе
           Ждать КопироватьФайлАсинх(Файл.ПолноеИмя, ПолноеИмяПриемника);
       КонецЕсли;
   КонецЦикла;

КонецПроцедуры
Копирование файла из одного каталога в другой в 1С 8.3:
Функция СкопироватьФайл(ИмяФайлаИсточник, ИмяФайлаПриемник, ВыдаватьСообщения = Ложь)

   Попытка
       Файл = Новый Файл(ИмяФайлаПриемник);
       КаталогФайла = Файл.Путь;

       СоздатьКаталог(КаталогФайла);
       КопироватьФайл(ИмяФайлаИсточник, ИмяФайлаПриемник);
   Исключение
       ИнфоОбОшибке = "Ошибка при копировании: " + ОписаниеОшибки()
       + " (источник: " + ИмяФайлаИсточник
       + "; приемник: " + ИмяФайлаПриемник + ")";
       Если ВыдаватьСообщения Тогда
           Сообщить(ИнфоОбОшибке);
       Иначе
           Предупреждение(ИнфоОбОшибке);
       КонецЕсли;
       Возврат Ложь;
   КонецПопытки;

   Возврат Истина;

КонецФункции
Пример копирования (перемещения) файлов из одного каталога в другой в 1С 8.3:
Процедура СкопироватьПереместитьКаталог(ИмяФайлаИсточник, ИмяФайлаПриемник, Переместить = Ложь)

   Если Прав(ИмяФайлаИсточник, 1) <> "\" Тогда
       ИмяФайлаИсточник = ИмяФайлаИсточник + "\";
   КонецЕсли;

   Файл = Новый Файл(ИмяФайлаПриемник);
   ИмяФайлаИсточник = ИмяФайлаИсточник + Файл.Имя;

   СоздатьКаталог(ИмяФайлаИсточник);
   Если Прав(ИмяФайлаИсточник, 1) <> "\" Тогда
       ИмяФайлаИсточник = ИмяФайлаИсточник + "\";
   КонецЕсли;

   Для Каждого Файлы Из НайтиФайлы(ИмяФайлаПриемник, "*.*", Истина) Цикл

       Если Файлы.ЭтоКаталог() Тогда
           СоздатьКаталог(СтрЗаменить(Файлы.ПолноеИмя, ИмяФайлаПриемник, ИмяФайлаИсточник));
           Продолжить;
       Иначе
           КаталогПереносимогоФайла = Новый Файл(СтрЗаменить(Файлы.Путь, ИмяФайлаПриемник, ИмяФайлаИсточник));
           Если НЕ КаталогПереносимогоФайла.Существует() Тогда
               СоздатьКаталог(КаталогПереносимогоФайла.ПолноеИмя);
           КонецЕсли;

           Если Переместить Тогда
               ПереместитьФайл(Файлы.ПолноеИмя, СтрЗаменить(Файлы.ПолноеИмя, ИмяФайлаПриемник, ИмяФайлаИсточник));
           Иначе
               КопироватьФайл(Файлы.ПолноеИмя, СтрЗаменить(Файлы.ПолноеИмя, ИмяФайлаПриемник, ИмяФайлаИсточник));
           КонецЕсли;
       КонецЕсли;

   КонецЦикла;

   Если Переместить Тогда
       УдалитьФайлы(ИмяФайлаПриемник);
   КонецЕсли;

КонецПроцедуры
Копирование файлов через объект файловой системы в 1С 8.3:
Процедура СкопироватьЧерезФСО(ИмяФайлаИсточник, ИмяФайлаПриемник)

    #Если Клиент Тогда
       //Если Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда // при наличии БСП
       //    ПоказатьПредупреждение(, НСтр("ru = 'Копирование файлов возможна только в Windows.'"));
       //    Возврат;
       //Иначе
       ФСО = Новый COMОбъект("Scripting.FileSystemObject");
       ФСО.CopyFolder(ИмяФайлаИсточник, ИмяФайлаПриемник);
       //КонецЕсли;
    #КонецЕсли

КонецПроцедуры
(УСТАРЕВШЕЕ) Копирование файлов в 1С 8.2/8.3:
Процедура КопироватьВсефайлыИзОдногоКаталогаВДругой(ОткудаКопируем, КудаКопируем)

   КаталогКудаКопируем = Новый Файл(КудаКопируем);
   Если КаталогКудаКопируем.Существует() Тогда
       Если КаталогКудаКопируем.ЭтоФайл() Тогда
           УдалитьФайлы(КаталогКудаКопируем.ПолноеИмя);
           СоздатьКаталог(КудаКопируем);
       КонецЕсли;
   Иначе
       СоздатьКаталог(КудаКопируем);
   КонецЕсли;

КонецПроцедуры

Процедура КопироватьСодержимоеКаталога(ОткудаКопируем, КудаКопируем)

   Файлы = НайтиФайлы(ОткудаКопируем, "*.*");
   Для Каждого Файл Из Файлы Цикл
       Если Файл.ЭтоКаталог() Тогда
           КопироватьСодержимоеКаталога(Файл.ПолноеИмя, КудаКопируем+"\"+Файл.Имя);
       Иначе
           КопироватьФайл(Файл.ПолноеИмя, КудаКопируем+"\"+Файл.Имя);
       КонецЕсли;
   КонецЦикла;

КонецПроцедуры
0
Комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 26.11.2016
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Назад к содержимому