Не копируется файл, но копируется каталог

1. user1304317 27.05.20 13:31 Сейчас в теме
Доброго времени суток!
Создал обработку по копированию файлов между каталогами.
Описание ошибки при копировании файла нет.
Суть такова, что папка копируется из одного каталога, в другой, но сам файл нет.

Привожу логики процедур по копированию. Возможно вы увидите мой косяк :

&НаСервере
Процедура СкопироватьКаталог(КаталогИсточник, КаталогПриемник, ПерезаписатьФайл = Ложь, МасштабироватьИзображение = Ложь, МаксШирина = 0, МаксВысота = 0)
	
	МассивФайловДляКопирования = НайтиФайлы(КаталогИсточник,"*.*");
	
	Для каждого ФайлДляКопирования Из МассивФайловДляКопирования Цикл
		
		НовыйПуть = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогПриемник) + ФайлДляКопирования.Имя;
		НовыйПуть = НРег(НовыйПуть);
		
		Если ФайлДляКопирования.ЭтоКаталог() Тогда
			
			НовыйФайл = Новый Файл(НовыйПуть);
			
			Если ПерезаписатьФайл Тогда
				Копировать = Истина;
			Иначе
				Копировать = НЕ НовыйФайл.Существует();
			КонецЕсли;	
			
			Если Копировать Тогда
				СоздатьКаталог(НовыйПуть);				
			КонецЕсли;
			
			СкопироватьКаталог(ФайлДляКопирования.ПолноеИмя, НовыйПуть, ПерезаписатьФайл, МасштабироватьИзображение, МаксШирина, МаксВысота);
			
		Иначе
			
			Попытка
				
				НовыйФайл = Новый Файл(НовыйПуть);
				
				Если ПерезаписатьФайл Тогда
					Копировать = Истина;
				Иначе
					Копировать = НЕ НовыйФайл.Существует();
				КонецЕсли;	
				
				Если Копировать Тогда
					
					ПутьКФайлу = ФайлДляКопирования.ПолноеИмя;
					
					Если ФайлДляКопирования.ПолучитьТолькоЧтение() Тогда
						ФайлДляКопирования.УстановитьТолькоЧтение(Ложь);
					КонецЕсли;
					
					Если НовыйФайл.Существует() И НовыйФайл.ПолучитьТолькоЧтение() Тогда
						НовыйФайл.УстановитьТолькоЧтение(Ложь);
					КонецЕсли;
										
					Если МасштабироватьИзображение Тогда
						Если НЕ БИТ_СТ_ОбщегоНазначенияСервер.МасштабироватьИзображение(ПутьКФайлу, НовыйПуть, МаксШирина, МаксВысота) Тогда
							КопироватьФайл(ПутьКФайлу, НовыйПуть);
						КонецЕсли;
					Иначе
						КопироватьФайл(ПутьКФайлу, НовыйПуть);
					КонецЕсли;
					
				КонецЕсли;	
				
			Исключение
				ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Не удалось скопировать " + ФайлДляКопирования.ПолноеИмя + ": " + ОписаниеОшибки());
			КонецПопытки;
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Функция СкопироватьФайлВКаталог(СсылкаНаФайл, КаталогПриемник, ИмяФайла, ТребуетсяКопироватьВложенныеПапки = Ложь, ПерезаписатьФайл = Ложь, МасштабироватьИзображение = Ложь, МаксШирина = 0, МаксВысота = 0)
	
	НовыйПуть = Неопределено;
	
	Если ЭтоСправочник(СсылкаНаФайл) Тогда 			
		
		ПутьКФайлу = ФайловыеФункции.ПолныйПутьТома(СсылкаНаФайл.Том) + СсылкаНаФайл.ПутьКФайлу;
		
	Иначе	
		
		ПутьКФайлу = СсылкаНаФайл;
		
	КонецЕсли;
	
	Если ЗначениеЗаполнено(ИмяФайла) Тогда
			
		НовыйПуть = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогПриемник);
				
		Если ТребуетсяКопироватьВложенныеПапки Тогда
			
			МассивПапок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяФайла, "\");
			ВсегоПапок = МассивПапок.Количество() - 1;
			Если ВсегоПапок > 0 Тогда
				
				Для Инд = 0 По ВсегоПапок цикл
					
					Если Инд < ВсегоПапок Тогда
						
						НовыйПуть = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(НовыйПуть) + МассивПапок[Инд];
																					
					Иначе
						
						НовыйПуть = НРег(НовыйПуть);
						НовыйФайл = Новый Файл(НовыйПуть);
						
						Если ПерезаписатьФайл Тогда
							Копировать = Истина;
						Иначе
							Копировать = НЕ НовыйФайл.Существует();
						КонецЕсли;	
						
						Если Копировать Тогда							
							СоздатьКаталог(НовыйПуть);							
							СкопироватьКаталог(ПутьКФайлу, НовыйПуть, ПерезаписатьФайл, МасштабироватьИзображение, МаксШирина, МаксВысота);							
						КонецЕсли;	
						
						Возврат НовыйПуть;
						
					КонецЕсли;
					
				КонецЦикла;
				
			Иначе	
				
				НовыйПуть = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(НовыйПуть) + ИмяФайла;
									
			КонецЕсли;
			
		Иначе	
			
			НовыйПуть = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(НовыйПуть) + ИмяФайла;					
			
		КонецЕсли;
		
		Попытка
			
			НовыйПуть = НРег(НовыйПуть);			
			НовыйФайл = Новый Файл(НовыйПуть);
			
			Если ПерезаписатьФайл Тогда
				Копировать = Истина;
			Иначе
				Копировать = НЕ НовыйФайл.Существует();
			КонецЕсли;	
			
			Если Копировать Тогда
				
				ТекФайл = Новый Файл(ПутьКФайлу);				
				Если ТекФайл.ПолучитьТолькоЧтение() Тогда
					ТекФайл.УстановитьТолькоЧтение(Ложь);
				КонецЕсли;
				
				Если НовыйФайл.Существует() И НовыйФайл.ПолучитьТолькоЧтение() Тогда
					НовыйФайл.УстановитьТолькоЧтение(Ложь);
				КонецЕсли;
							
				Если МасштабироватьИзображение Тогда
					Если НЕ БИТ_СТ_ОбщегоНазначенияСервер.МасштабироватьИзображение(ПутьКФайлу, НовыйПуть, МаксШирина, МаксВысота) Тогда
						КопироватьФайл(ПутьКФайлу, НовыйПуть);
					КонецЕсли;
				Иначе
					КопироватьФайл(ПутьКФайлу, НовыйПуть);			
				КонецЕсли;
				
			КонецЕсли;
								
		Исключение	
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Не удалось скопировать " + ПутьКФайлу + ": " + ОписаниеОшибки());
			НовыйПуть = Неопределено;
		КонецПопытки;
		
	КонецЕсли;
		
	Возврат НовыйПуть;
	
КонецФункции

Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. GeraltSnow 174 27.05.20 14:19 Сейчас в теме
Предположу, что каталог нужно копировать в два захода. Сначала копируешь сам каталог и все его подкаталоги, а потом уже файлы.
user1304317; +1 Ответить
3. user1304317 27.05.20 14:25 Сейчас в теме
(2) Могли бы подсказать , после какой строки кода?
4. GeraltSnow 174 27.05.20 14:36 Сейчас в теме
(3)
В процедуре СкопироватьКаталог цикл
Для каждого ФайлДляКопирования Из МассивФайловДляКопирования

Разбить на два аналогичных. В первом обрабатывать только каталоги, во втором только файлы.
5. user1304317 27.05.20 14:38 Сейчас в теме
(4) То есть мне просто еще добавить такой же кусок кода?
7. GeraltSnow 174 27.05.20 15:33 Сейчас в теме
(5)
&НаСервере
Процедура СкопироватьКаталог(КаталогИсточник, КаталогПриемник, ПерезаписатьФайл = Ложь, МасштабироватьИзображение = Ложь, МаксШирина = 0, МаксВысота = 0)
    
    МассивФайловДляКопирования = НайтиФайлы(КаталогИсточник,"*.*");
    
    Для каждого ФайлДляКопирования Из МассивФайловДляКопирования Цикл
        
        НовыйПуть = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогПриемник) + ФайлДляКопирования.Имя;
        НовыйПуть = НРег(НовыйПуть);
        
        Если ФайлДляКопирования.ЭтоКаталог() Тогда
            
            НовыйФайл = Новый Файл(НовыйПуть);
            
            Если ПерезаписатьФайл Тогда
                Копировать = Истина;
            Иначе
                Копировать = НЕ НовыйФайл.Существует();
            КонецЕсли;    
            
            Если Копировать Тогда
                СоздатьКаталог(НовыйПуть);                
            КонецЕсли;
            
            СкопироватьКаталог(ФайлДляКопирования.ПолноеИмя, НовыйПуть, ПерезаписатьФайл, МасштабироватьИзображение, МаксШирина, МаксВысота);
            
        КонецЕсли;
        
    КонецЦикла;

 Для каждого ФайлДляКопирования Из МассивФайловДляКопирования Цикл
        
        НовыйПуть = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогПриемник) + ФайлДляКопирования.Имя;
        НовыйПуть = НРег(НовыйПуть);
        
        Если НЕ ФайлДляКопирования.ЭтоКаталог() Тогда
            
            Попытка
                
                НовыйФайл = Новый Файл(НовыйПуть);
                
                Если ПерезаписатьФайл Тогда
                    Копировать = Истина;
                Иначе
                    Копировать = НЕ НовыйФайл.Существует();
                КонецЕсли;    
                
                Если Копировать Тогда
                    
                    ПутьКФайлу = ФайлДляКопирования.ПолноеИмя;
                    
                    Если ФайлДляКопирования.ПолучитьТолькоЧтение() Тогда
                        ФайлДляКопирования.УстановитьТолькоЧтение(Ложь);
                    КонецЕсли;
                    
                    Если НовыйФайл.Существует() И НовыйФайл.ПолучитьТолькоЧтение() Тогда
                        НовыйФайл.УстановитьТолькоЧтение(Ложь);
                    КонецЕсли;
                                        
                    Если МасштабироватьИзображение Тогда
                        Если НЕ БИТ_СТ_ОбщегоНазначенияСервер.МасштабироватьИзображение(ПутьКФайлу, НовыйПуть, МаксШирина, МаксВысота) Тогда
                            КопироватьФайл(ПутьКФайлу, НовыйПуть);
                        КонецЕсли;
                    Иначе
                        КопироватьФайл(ПутьКФайлу, НовыйПуть);
                    КонецЕсли;
                    
                КонецЕсли;    
                
            Исключение
                ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Не удалось скопировать " + ФайлДляКопирования.ПолноеИмя + ": " + ОписаниеОшибки());
            КонецПопытки;
            
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры
Показать
user1304317; +1 Ответить
8. user1304317 27.05.20 15:36 Сейчас в теме
(7)
&НаСервере
Процедура СкопироватьКаталог(КаталогИсточник, КаталогПриемник, ПерезаписатьФайл = Ложь, МасштабироватьИзображение = Ложь, МаксШирина = 0, МаксВысота = 0)

МассивФайловДляКопирования = НайтиФайлы(КаталогИсточник,"*.*");

Для каждого ФайлДляКопирования Из МассивФайловДляКопирования Цикл

НовыйПуть = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогПриемник) + ФайлДляКопирования.Имя;
НовыйПуть = НРег(НовыйПуть);

Если ФайлДляКопирования.ЭтоКаталог() Тогда

НовыйФайл = Новый Файл(НовыйПуть);

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

Если Копировать Тогда
СоздатьКаталог(НовыйПуть);
КонецЕсли;

СкопироватьКаталог(ФайлДляКопирования.ПолноеИмя, НовыйПуть, ПерезаписатьФайл, МасштабироватьИзображение, МаксШирина, МаксВысота);

КонецЕсли;

КонецЦикла;

Для каждого ФайлДляКопирования Из МассивФайловДляКопирования Цикл

НовыйПуть = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогПриемник) + ФайлДляКопирования.Имя;
НовыйПуть = НРег(НовыйПуть);

Если НЕ ФайлДляКопирования.ЭтоКаталог() Тогда

Попытка

НовыйФайл = Новый Файл(НовыйПуть);

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

Если Копировать Тогда

ПутьКФайлу = ФайлДляКопирования.ПолноеИмя;

Если ФайлДляКопирования.ПолучитьТолькоЧтение() Тогда
ФайлДляКопирования.УстановитьТолькоЧтение(Ложь);
КонецЕсли;

Если НовыйФайл.Существует() И НовыйФайл.ПолучитьТолькоЧтение() Тогда
НовыйФайл.УстановитьТолькоЧтение(Ложь);
КонецЕсли;

Если МасштабироватьИзображение Тогда
Если НЕ БИТ_СТ_ОбщегоНазначенияСервер.МасштабироватьИзображение(ПутьКФайлу, НовыйПуть, МаксШирина, МаксВысота) Тогда
КопироватьФайл(ПутьКФайлу, НовыйПуть);
КонецЕсли;
Иначе
КопироватьФайл(ПутьКФайлу, НовыйПуть);
КонецЕсли;

КонецЕсли;

Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Не удалось скопировать " + ФайлДляКопирования.ПолноеИмя + ": " + ОписаниеОшибки());
КонецПопытки;

КонецЕсли;

КонецЦикла;

КонецПроцедуры
Показать


Не помогло(. Запустил обработку. Все также. Пустая папка(
6. user1304317 27.05.20 15:03 Сейчас в теме
(4) Я сейчас если честно запутался.
9. oleg-x 27 27.05.20 15:46 Сейчас в теме
Советую пройтись отладкой, что бы не гадать. Создайте папку с двумя файлами и попробуйте скопировать. Пройдясь отладкой и посмотрев значения переменных, поймете что не так.
user1304317; +1 Ответить
10. user1304317 27.05.20 15:49 Сейчас в теме
(9) Вот именно, что отладка, не выдает ошибок при попытке скопировать. Значения переменных те же.
Мистика.
11. oleg-x 27 27.05.20 16:08 Сейчас в теме
(10) То есть КопироватьФайл(ПутьКФайлу, НовыйПуть); выполняет без ошибок и
значения переменных ПутьКФайлу и НовыйПуть разные и соответствуют новому и старому пути. И путь указан не к каталогу, а к конечному файлу?
13. user1304317 27.05.20 16:10 Сейчас в теме
(11) Новый путь кривой у меня все таки.
Прикрепленные файлы:
12. user1304317 27.05.20 16:09 Сейчас в теме
(9)
(2)
Ошибка найдена. У меня почему к новому файлу не прибавляется само имя файла.
Прикрепленные файлы:
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот