Программно скопировать файлы из одной папки в другую 1С 8.2/8.3
Данные > Примеры кода 1С > 1С 8.3 Файлы, каталоги
Перейти в раздел примеры кода 1С 8.3:
Иногда при разработке конфигурации возникают не стандартные ситуации. Например: реализация автоматического перемещения файлов/папок или перемещение файлов по локальной сети. Возникает вопрос - как перенести с помощью программного кода 1С 8 все файлы из одной папки в другую? Задача простая и реализуется одной процедурой в модуле объекта метаданных (Например - обработки). Ниже представлен полноценный рабочий код:
Копирование всех файлов из одного каталога в другой в 1С 8.3:
Процедура СкопироватьФайлы(Знач КаталогИсточник, Знач КаталогПриемник)
Попытка
//Проверим и поправим окончания пути каталогов
Если Прав(КаталогИсточник, 1) <> "\" Тогда
КаталогИсточник = КаталогИсточник + "\";
КонецЕсли;
Если Прав(КаталогПриемник, 1) <> "\" Тогда
КаталогПриемник = КаталогПриемник + "\";
КонецЕсли;
//Создадим каталог приемник
СоздатьКаталог(КаталогПриемник);
МассивФайлов = НайтиФайлы(КаталогИсточник, "*.*", Истина);
Для Каждого Файл Из МассивФайлов Цикл
ПолноеИмяИсточник = Файл.ПолноеИмя;
ПолноеИмяПриемник = КаталогПриемник + СтрЗаменить(Файл.ПолноеИмя, КаталогИсточник, "");
Если ПустаяСтрока(Файл.Расширение) Тогда
СоздатьКаталог(ПолноеИмяПриемник);
Иначе
КопироватьФайл(ПолноеИмяИсточник, ПолноеИмяПриемник);
КонецЕсли;
КонецЦикла;
Исключение
ИнфоОбОшибке = "Ошибка при копировании: " + ОписаниеОшибки()
+ " (из каталога: " + КаталогИсточник
+ "; в каталог: " + КаталогПриемник + ")";
Если ВыдаватьСообщения Тогда
Сообщить(ИнфоОбОшибке);
Иначе
Предупреждение(ИнфоОбОшибке);
КонецЕсли;
КонецПопытки;
КонецПроцедуры
Попытка
//Проверим и поправим окончания пути каталогов
Если Прав(КаталогИсточник, 1) <> "\" Тогда
КаталогИсточник = КаталогИсточник + "\";
КонецЕсли;
Если Прав(КаталогПриемник, 1) <> "\" Тогда
КаталогПриемник = КаталогПриемник + "\";
КонецЕсли;
//Создадим каталог приемник
СоздатьКаталог(КаталогПриемник);
МассивФайлов = НайтиФайлы(КаталогИсточник, "*.*", Истина);
Для Каждого Файл Из МассивФайлов Цикл
ПолноеИмяИсточник = Файл.ПолноеИмя;
ПолноеИмяПриемник = КаталогПриемник + СтрЗаменить(Файл.ПолноеИмя, КаталогИсточник, "");
Если ПустаяСтрока(Файл.Расширение) Тогда
СоздатьКаталог(ПолноеИмяПриемник);
Иначе
КопироватьФайл(ПолноеИмяИсточник, ПолноеИмяПриемник);
КонецЕсли;
КонецЦикла;
Исключение
ИнфоОбОшибке = "Ошибка при копировании: " + ОписаниеОшибки()
+ " (из каталога: " + КаталогИсточник
+ "; в каталог: " + КаталогПриемник + ")";
Если ВыдаватьСообщения Тогда
Сообщить(ИнфоОбОшибке);
Иначе
Предупреждение(ИнфоОбОшибке);
КонецЕсли;
КонецПопытки;
КонецПроцедуры
Асинхронное копирование всех файлов из одного каталога в другой в 1С 8.3:
Асинх Процедура СкопироватьФайлыАсинх(Знач КаталогИсточник, Знач КаталогПриемник)
КаталогПриемник = Новый Файл(КаталогПриемник);
Если Не Ждать КаталогПриемник.СуществуетАсинх() Тогда
Ждать СоздатьКаталогАсинх(КаталогПриемник.ПолноеИмя);
КонецЕсли;
МассивФайлов = Ждать НайтиФайлыАсинх(КаталогИсточник, "*.*", Ложь);
Для Каждого Файл Из МассивФайлов Цикл
ПолноеИмяПриемника = КаталогПриемник.ПолноеИмя + "\" + Файл.Имя;
Если Файл.ЭтоКаталог() Тогда
СкопироватьФайлы(Файл.ПолноеИмя, ПолноеИмяПриемника);
Иначе
Ждать КопироватьФайлАсинх(Файл.ПолноеИмя, ПолноеИмяПриемника);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
КаталогПриемник = Новый Файл(КаталогПриемник);
Если Не Ждать КаталогПриемник.СуществуетАсинх() Тогда
Ждать СоздатьКаталогАсинх(КаталогПриемник.ПолноеИмя);
КонецЕсли;
МассивФайлов = Ждать НайтиФайлыАсинх(КаталогИсточник, "*.*", Ложь);
Для Каждого Файл Из МассивФайлов Цикл
ПолноеИмяПриемника = КаталогПриемник.ПолноеИмя + "\" + Файл.Имя;
Если Файл.ЭтоКаталог() Тогда
СкопироватьФайлы(Файл.ПолноеИмя, ПолноеИмяПриемника);
Иначе
Ждать КопироватьФайлАсинх(Файл.ПолноеИмя, ПолноеИмяПриемника);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Копирование файла из одного каталога в другой в 1С 8.3:
Функция СкопироватьФайл(ИмяФайлаИсточник, ИмяФайлаПриемник, ВыдаватьСообщения = Ложь)
Попытка
Файл = Новый Файл(ИмяФайлаПриемник);
КаталогФайла = Файл.Путь;
СоздатьКаталог(КаталогФайла);
КопироватьФайл(ИмяФайлаИсточник, ИмяФайлаПриемник);
Исключение
ИнфоОбОшибке = "Ошибка при копировании: " + ОписаниеОшибки()
+ " (источник: " + ИмяФайлаИсточник
+ "; приемник: " + ИмяФайлаПриемник + ")";
Если ВыдаватьСообщения Тогда
Сообщить(ИнфоОбОшибке);
Иначе
Предупреждение(ИнфоОбОшибке);
КонецЕсли;
Возврат Ложь;
КонецПопытки;
Возврат Истина;
КонецФункции
Попытка
Файл = Новый Файл(ИмяФайлаПриемник);
КаталогФайла = Файл.Путь;
СоздатьКаталог(КаталогФайла);
КопироватьФайл(ИмяФайлаИсточник, ИмяФайлаПриемник);
Исключение
ИнфоОбОшибке = "Ошибка при копировании: " + ОписаниеОшибки()
+ " (источник: " + ИмяФайлаИсточник
+ "; приемник: " + ИмяФайлаПриемник + ")";
Если ВыдаватьСообщения Тогда
Сообщить(ИнфоОбОшибке);
Иначе
Предупреждение(ИнфоОбОшибке);
КонецЕсли;
Возврат Ложь;
КонецПопытки;
Возврат Истина;
КонецФункции
Пример копирования (перемещения) файлов из одного каталога в другой в 1С 8.3:
Процедура СкопироватьПереместитьКаталог(ИмяФайлаИсточник, ИмяФайлаПриемник, Переместить = Ложь)
Если Прав(ИмяФайлаИсточник, 1) <> "\" Тогда
ИмяФайлаИсточник = ИмяФайлаИсточник + "\";
КонецЕсли;
Файл = Новый Файл(ИмяФайлаПриемник);
ИмяФайлаИсточник = ИмяФайлаИсточник + Файл.Имя;
СоздатьКаталог(ИмяФайлаИсточник);
Если Прав(ИмяФайлаИсточник, 1) <> "\" Тогда
ИмяФайлаИсточник = ИмяФайлаИсточник + "\";
КонецЕсли;
Для Каждого Файлы Из НайтиФайлы(ИмяФайлаПриемник, "*.*", Истина) Цикл
Если Файлы.ЭтоКаталог() Тогда
СоздатьКаталог(СтрЗаменить(Файлы.ПолноеИмя, ИмяФайлаПриемник, ИмяФайлаИсточник));
Продолжить;
Иначе
КаталогПереносимогоФайла = Новый Файл(СтрЗаменить(Файлы.Путь, ИмяФайлаПриемник, ИмяФайлаИсточник));
Если НЕ КаталогПереносимогоФайла.Существует() Тогда
СоздатьКаталог(КаталогПереносимогоФайла.ПолноеИмя);
КонецЕсли;
Если Переместить Тогда
ПереместитьФайл(Файлы.ПолноеИмя, СтрЗаменить(Файлы.ПолноеИмя, ИмяФайлаПриемник, ИмяФайлаИсточник));
Иначе
КопироватьФайл(Файлы.ПолноеИмя, СтрЗаменить(Файлы.ПолноеИмя, ИмяФайлаПриемник, ИмяФайлаИсточник));
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Переместить Тогда
УдалитьФайлы(ИмяФайлаПриемник);
КонецЕсли;
КонецПроцедуры
Если Прав(ИмяФайлаИсточник, 1) <> "\" Тогда
ИмяФайлаИсточник = ИмяФайлаИсточник + "\";
КонецЕсли;
Файл = Новый Файл(ИмяФайлаПриемник);
ИмяФайлаИсточник = ИмяФайлаИсточник + Файл.Имя;
СоздатьКаталог(ИмяФайлаИсточник);
Если Прав(ИмяФайлаИсточник, 1) <> "\" Тогда
ИмяФайлаИсточник = ИмяФайлаИсточник + "\";
КонецЕсли;
Для Каждого Файлы Из НайтиФайлы(ИмяФайлаПриемник, "*.*", Истина) Цикл
Если Файлы.ЭтоКаталог() Тогда
СоздатьКаталог(СтрЗаменить(Файлы.ПолноеИмя, ИмяФайлаПриемник, ИмяФайлаИсточник));
Продолжить;
Иначе
КаталогПереносимогоФайла = Новый Файл(СтрЗаменить(Файлы.Путь, ИмяФайлаПриемник, ИмяФайлаИсточник));
Если НЕ КаталогПереносимогоФайла.Существует() Тогда
СоздатьКаталог(КаталогПереносимогоФайла.ПолноеИмя);
КонецЕсли;
Если Переместить Тогда
ПереместитьФайл(Файлы.ПолноеИмя, СтрЗаменить(Файлы.ПолноеИмя, ИмяФайлаПриемник, ИмяФайлаИсточник));
Иначе
КопироватьФайл(Файлы.ПолноеИмя, СтрЗаменить(Файлы.ПолноеИмя, ИмяФайлаПриемник, ИмяФайлаИсточник));
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Переместить Тогда
УдалитьФайлы(ИмяФайлаПриемник);
КонецЕсли;
КонецПроцедуры
Копирование файлов через объект файловой системы в 1С 8.3:
Процедура СкопироватьЧерезФСО(ИмяФайлаИсточник, ИмяФайлаПриемник)
#Если Клиент Тогда
//Если Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда // при наличии БСП
// ПоказатьПредупреждение(, НСтр("ru = 'Копирование файлов возможна только в Windows.'"));
// Возврат;
//Иначе
ФСО = Новый COMОбъект("Scripting.FileSystemObject");
ФСО.CopyFolder(ИмяФайлаИсточник, ИмяФайлаПриемник);
//КонецЕсли;
#КонецЕсли
КонецПроцедуры
#Если Клиент Тогда
//Если Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда // при наличии БСП
// ПоказатьПредупреждение(, НСтр("ru = 'Копирование файлов возможна только в Windows.'"));
// Возврат;
//Иначе
ФСО = Новый COMОбъект("Scripting.FileSystemObject");
ФСО.CopyFolder(ИмяФайлаИсточник, ИмяФайлаПриемник);
//КонецЕсли;
#КонецЕсли
КонецПроцедуры
(УСТАРЕВШЕЕ) Копирование файлов в 1С 8.2/8.3:
Процедура КопироватьВсефайлыИзОдногоКаталогаВДругой(ОткудаКопируем, КудаКопируем)
КаталогКудаКопируем = Новый Файл(КудаКопируем);
Если КаталогКудаКопируем.Существует() Тогда
Если КаталогКудаКопируем.ЭтоФайл() Тогда
УдалитьФайлы(КаталогКудаКопируем.ПолноеИмя);
СоздатьКаталог(КудаКопируем);
КонецЕсли;
Иначе
СоздатьКаталог(КудаКопируем);
КонецЕсли;
КонецПроцедуры
Процедура КопироватьСодержимоеКаталога(ОткудаКопируем, КудаКопируем)
Файлы = НайтиФайлы(ОткудаКопируем, "*.*");
Для Каждого Файл Из Файлы Цикл
Если Файл.ЭтоКаталог() Тогда
КопироватьСодержимоеКаталога(Файл.ПолноеИмя, КудаКопируем+"\"+Файл.Имя);
Иначе
КопироватьФайл(Файл.ПолноеИмя, КудаКопируем+"\"+Файл.Имя);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
КаталогКудаКопируем = Новый Файл(КудаКопируем);
Если КаталогКудаКопируем.Существует() Тогда
Если КаталогКудаКопируем.ЭтоФайл() Тогда
УдалитьФайлы(КаталогКудаКопируем.ПолноеИмя);
СоздатьКаталог(КудаКопируем);
КонецЕсли;
Иначе
СоздатьКаталог(КудаКопируем);
КонецЕсли;
КонецПроцедуры
Процедура КопироватьСодержимоеКаталога(ОткудаКопируем, КудаКопируем)
Файлы = НайтиФайлы(ОткудаКопируем, "*.*");
Для Каждого Файл Из Файлы Цикл
Если Файл.ЭтоКаталог() Тогда
КопироватьСодержимоеКаталога(Файл.ПолноеИмя, КудаКопируем+"\"+Файл.Имя);
Иначе
КопироватьФайл(Файл.ПолноеИмя, КудаКопируем+"\"+Файл.Имя);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник