Имя: Пароль:
1C
1C 7.7
v7: Как перенести по простому папку?
0 РусскийВедун
 
05.12.18
14:46
Есть функция ПереименоватьФайл, которая переносит файл, но как перенести папку? Такой функции не нашел. Мало того, как узнать какие папки есть внутри этой папки, чтобы создать в новом месте такую же иерархию папок, а в исходном месте - тогда удалятькаталог (благо такая функция есть).
1 Карст
 
05.12.18
14:49
2 Kigo_Kigo
 
05.12.18
14:53
ПереименоватьФайл -> которая переносит файл
Однако
3 РусскийВедун
 
05.12.18
15:33
В-общем все скопировал, а удалить никак каталог не получается.  Пишет ошибка.
Функция ЭтоКаталог(ИмяФайла)
     Перем Размер, Атрибуты, Создан, Доступ, Запись, РасшИмяФайла;
     Рез = 0;
     ФС.АтрибутыФайла(ИмяФайла, Размер, Атрибуты, Создан, Доступ, Запись, РасшИмяФайла);
     Если Сред(Атрибуты,4,1) = "1" Тогда
          Рез = 1;
     КонецЕсли;
     Возврат Рез;
КонецФункции        

процедура КопироватьФайлы(ПутьОткуда,ПутьКуда)      
    ФС_ = СоздатьОбъект("ФС");
    Если (ФС_.СуществуетФайл(путькуда) = 0)  Тогда
        ФС_.СоздатьКаталог(ПутьКуда);
    КонецЕсли;
    ИмяФайла = ФС_.НайтиПервыйФайл(ПутьОткуда+"\*.*");
    Пока ПустаяСтрока(ИмяФайла) = 0 Цикл
        Если (ИмяФайла <> ".") И (ИмяФайла <> "..") Тогда
            Если ЭтоКаталог(ПутьОткуда+"\"+ИмяФайла) = 1 Тогда
                ПодКаталогОткуда = ПутьОткуда + "\"+ИмяФайла;
                ПодКаталогКуда = ПутьКуда + "\"+ИмяФайла;
                // Проверим наличие подкаталога в папке ПутьКуда
                // - если его нет, создадим
                Если (ФС_.СуществуетФайл(ПодКаталогКуда) = 0) ИЛИ
                (ЭтоКаталог(ПодКаталогКуда) = 0) Тогда
                    ФС_.СоздатьКаталог(ПодКаталогКуда);
                КонецЕсли;
                КопироватьФайлы(ПодКаталогОткуда,ПодКаталогКуда);
            Иначе
                Поз = Найти(ИмяФайла,".");
                //Расш = Нрег(?(Поз>0,Сред(ИмяФайла,Поз+1),""));
                //Если Расш <> Нрег(Расширение) Тогда
                //    ИмяФайла = ФС_.НайтиСледующийФайл();
                //    Продолжить;
                //КонецЕсли;
                ИмяФайлаИсточника = ПутьОткуда + "\" + ИмяФайла;
                ИмяФайлаПриемника = ПутьКуда + "\" + ИмяФайла;
                ФС_.КопироватьФайл(ИмяФайлаИсточника,ИмяФайлаПриемника,0); // Копируем с перзаписью
            КонецЕсли;
        КонецЕсли;
        ИмяФайла = ФС_.НайтиСледующийФайл();
    КонецЦикла;                              

конецпроцедуры

а сам вызов
ПутьОткуда=сокрлп(константа.путь)+"\";
                    ПутьКуда=сокрлп(константа.путь2)+"\";  
                    попытка
                        копироватьфайлы(ПутьОткуда,ПутьКуда);    
                    исключение      
                        сообщить(описаниеошибки());
                    конецпопытки;
                    ФС0 = СоздатьОбъект("ФС");  
                    попытка
                        ФС0.удалитькаталог(ПутьОткуда);    
                    исключение  
                        сообщить(описаниеошибки());
                    конецпопытки;
В каталоге который хочу удалить никого нету. Почему не удаляет?  Пишет Ошибка при выполнении команды; и все
4 Масянька
 
05.12.18
15:38
(3) Потому что каталог занят эской.
Прикол семерки. А может и в восьмерке такое есть.
5 РусскийВедун
 
05.12.18
15:38
(4) проводник без проблем удаляет
6 Масянька
 
05.12.18
15:39
(5) Открой этот каталог в эске. Закрой. А потом попробуй удалить проводником (эску не закрывать!).
7 РусскийВедун
 
05.12.18
15:46
(6) Удаляет. Или как именно сделать открыть закрыть?
8 Масянька
 
05.12.18
15:51
(7) Слегка попутала.
Если в каталоге открыть файл, закрыть. То потом пока эску не закроешь каталог не удалится.
Ошибка? Это не ошибка, это системная функция.