Имя: Пароль:
1C
 
Банальный вопрос - как переместить каталог, содержащий файлы и каталоги?
,
0 Гений 1С
 
гуру
24.01.22
12:21
Вызов ПереместитьФайл выдает ошибку:

Ошибка при вызове метода контекста (ПереместитьФайл)
    ПереместитьФайл(СтараяПолнаяПапкаФайловПроекта, НоваяПолнаяПапкаФайловПроекта);
по причине:
Ошибка переименования файлов
по причине:
Неправильный путь к файлу 'D:\2020'. Объект является каталогом

Нет такой функции сработает и только Shell дергать?
Не, ну можно через создание каталогов, перемещение файлов и потом создание каталогов сделать, но блин...
Может есть какой метод? Может в БСП можно найтить?
1 pechkin
 
24.01.22
12:22
Переименовать каталог может быть попробовать?
2 Dotoshin
 
24.01.22
12:28
3 Гений 1С
 
гуру
24.01.22
12:51
(2) пока ждал ответ, так и наваял, но получаю ошибку:

йМодуль.дор_Сервер.Модуль(1016)}: Ошибка при вызове метода контекста (MoveFolder)
    FSO.MoveFolder(Источник, Приемник); //D:\ПРОЕКТ\

Произошла исключительная ситуация (0x800a004c)

Код:

Процедура ПереместитьКаталогFSO(Источник, Приемник) Экспорт
    FSO = Новый COMОбъект("Scripting.FileSystemObject");
    Если FSO.FolderExists(Источник) Тогда
        Сообщить("Есть папка");
    Иначе
        Сообщить("Папки нет");
    КонецЕсли;

    FSO.MoveFolder(Источник, Приемник); //D:\ПРОЕКТ
КонецПроцедуры

Причем пишет, что папка есть, а переместить не может. Ошибка гуглится как "не найден путь", но путь то найден...
4 Гений 1С
 
гуру
24.01.22
12:54
Хотя возможно это потому что я не так записываю каталоги

у меня условно
источник: D:\Проекты\1
Приемник: D:\Проекты\2

Возможно, нужно приемник поменять на: D:\Проекты
5 Гений 1С
 
гуру
24.01.22
13:30
В общем он не работает с вложенными папками.
т.е. так не сработает, если папка 2 не создана и не является финальной:

источник: D:\Проекты\1\А\Х
Приемник: D:\Проекты\2\А\Х

Т.е. по сути мне надо переименовать папку 1 в папку 2.

Ну т.е. это не совсем перемещение.

В итоге работает вот такой код:

Процедура ПереместитьКаталогFSO(Источник, Приемник) Экспорт
    //Источник, приемник - строго без финальных слешей
    FSO = Новый COMОбъект("Scripting.FileSystemObject");
    //Если FSO.FolderExists(Источник) Тогда
    //    Сообщить("Есть папка");
    //Иначе
    //    Сообщить("Папки нет");
    //КонецЕсли;
    Файлы = НайтиФайлы(Источник, "*.*", ложь);
    СоздатьКаталог(Приемник);
    Для Каждого Файл ИЗ Файлы Цикл
        FSO.MoveFolder(Источник + "\" + Файл.Имя, Приемник + "\" + Файл.Имя);
    КонецЦикла;
КонецПроцедуры
6 Ненавижу 1С
 
гуру
25.01.22
00:57
(5) это называется переименовать
objFSO = Новый COMОбъект("Scripting.FileSystemObject");
objFolder = objFSO.GetFolder("C:\_1");
objFolder.Name = "_21";
7 Гений 1С
 
гуру
25.01.22
08:00
(6) нет, не переименовать, нужно именно переместить. посмотри внимательнее.
8 Гений 1С
 
гуру
25.01.22
08:01
ибо там могут быт еще и другие папки, которые перемещать не нужно.

Пример папок:

Иванов\Проект1
Иванов\Проект2
Петров\Проект3
Петров\Проект4

Если мы передаем проект2 Петрову, нужно чтобы стало так:

Иванов\Проект1
Петров\Проект2
Петров\Проект3
Петров\Проект4

Т.е. папка Иванов должна остаться. ОК?
9 Leonardo1c
 
25.01.22
12:23
Создать структуру каталогов и переместить в них файлы. Это задача уровня информатики 9 класса ))
10 Гений 1С
 
гуру
25.01.22
13:28
(9) вот потому мне и не хочется ею заниматься, оставил на откуп FS, код в (5) реализован
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший