Имя: Пароль:
1C
 
Каким образом перебрать файлы в каталогах и подкаталогах?
0 Прапор Лящук
 
10.07.08
10:00
Как можно в 7.7 реализовать перебор файлов в исходном каталоге, а также всех файлов в подкаталогах?
1 Heckfy
 
10.07.08
10:01
Ищи обработку, типа, сканированиеКаталога.ert.
2 dk
 
10.07.08
10:08
3 ДенисЧ
 
10.07.08
10:12
фс.найтипервыйфайл/фс.найтиследующийфайл
+ фс.атрибутыФАйла
+ рекурсия.
Такое пишут на первом курсе.

ПРавда, Для первого класса задача слегка тяжеловата, согласен...
4 Impressing3
 
10.07.08
10:16
Забавно)) а зачем перебор файлов то нужен?..
5 Прапор Лящук
 
10.07.08
10:16
ДенисЧ? А как мне пойти дальше, вниз по каталогам? Объясни уж первокласснику
6 Прапор Лящук
 
10.07.08
10:17
Все, понял
7 ДенисЧ
 
10.07.08
10:18
(5) я ж грю. Испольлзуем ФС.АТрибутыФАйла, через него определяем, Что это каталог, сохраняем в список. После прохождения всего текущего каталога то же самое повторям для каждого каталога из списка.
Особенно нужно  учесть каталоги с именами "." и "..". В них переходить не надо.
8 Heckfy
 
10.07.08
10:29
(4) Ну, например, найти все мд файлы и загнать пути к ним в ТЗ. Да масса причин.
9 YF
 
10.07.08
10:35
(0) вот у меня такая процедурка очистки каталога работает ...

//------- © YF --------------------
// Очищает каталог от файлов, включая подкаталоги и,
// возможно, удаляет сам каталог.
// _каталог:  - имя каталога БЕЗ СЛЭША В КОНЦЕ
// _полностью:
//                1 - удалить сам каталог, все файлы, все подкаталоги.
//                2 - удалить все файлы, все файлы во всех подкаталогах, все подкаталоги
//                3 - удалить все файлы, все файлы в подкаталогах
Процедура глОчисткаКаталога(_каталог, _полностью = 3) Экспорт
   Если глСуществуетФайл(_каталог, 1) = 1 Тогда
       атрибуты_="";
       // Запишем фсе найденные файлы в список
       списокФайлов = СоздатьОбъект("СписокЗначений");
       ФС.УстТекКаталог(_каталог);
       файл_ = СокрЛП(ФС.НайтиПервыйФайл("*.*"));
       Пока файл_ <> "" Цикл
           Если (файл_=".") или (файл_="..") Тогда
               файл_=ФС.НайтиСледующийФайл();
               Продолжить;
           КонецЕсли; //(файл_=".") или (файл_="..")
           списокФайлов.ДобавитьЗначение(файл_);
           файл_=ФС.НайтиСледующийФайл();
       КонецЦикла;
       // Теперь пройдемся по списку
       Для ы=1 По списокФайлов.РазмерСписка() Цикл
           ФС.УстТекКаталог(_каталог);
           файл_ = списокФайлов.ПолучитьЗначение(ы);
           // Если файл - удалим, если каталог, то вызовем процедуру для него
           атрибуты_="";
           ФС.АтрибутыФайла(файл_,"",атрибуты_);
           Если  Сред(атрибуты_,4,1) <> "1" Тогда
               //Это именно файл
               Попытка
                   ФС.УдалитьФайл(файл_);
                   ЗаписьЖурналаРегистрации("Удаляем файл процедурой ""глОчисткаКаталога("+_каталог+", "+Строка(_полностью)+")""", "Файлы",
                   "Удаление файла", глПользователь, 3);
               Исключение
               КонецПопытки;
           Иначе
               //Это каталог
               Если _полностью < 3 Тогда
                   полностью_ = 1;
               Иначе
                   полностью_ = 3;
               КонецЕсли; //_полностью < 3
               глОчисткаКаталога(ФС.ТекКаталог()+"\"+файл_, полностью_);
           КонецЕсли; // Сред(атрибуты_,4,1) <> "1"
       КонецЦикла;
       ФС.УстТекКаталог(КаталогПользователя());
       ФС.НайтиПервыйФайл("*.*");
       Если _полностью = 1 Тогда
           //Удалим и сам каталог
           Попытка
               ФС.УдалитьКаталог(_каталог);
               ЗаписьЖурналаРегистрации("Удаляем файл процедурой ""глОчисткаКаталога("+_каталог+", "+Строка(_полностью)+")""", "Файлы",
               "Удаление каталога", глПользователь, 3);
           Исключение
           КонецПопытки;    
       КонецЕсли; //_полностью = 1
   КонецЕсли;//глСуществуетФайл(_каталог, 1)=1    
КонецПроцедуры //глОчисткаКаталога

+
//------- © YF --------------------
// Функция проверяет существует ли каталог или файл <_путь>
// В отличие от стандартного метода ФС, проверяет действительно ли
// это файл или каталог.
// Возвращает 1 или 0
// _путь - строка с путем к файлу/каталогу
// _чтоИщем: 0 - файл, 1 - каталог, 2 - все равно что, лишь бы было
Функция глСуществуетФайл(Знач _путь, Знач _чтоИщем = 0) Экспорт
   // Удалим слэш в конце, иначе криво отработает ФС.АтрибутыФайла()
   путь_ = СокрЛП(_путь);
   Если (Прав(путь_, 1) = "\") или (Прав(путь_, 1) = "/") Тогда
       путь_ = Лев(путь_, СтрДлина(путь_) - 1);
   КонецЕсли; //(Прав(путь_, 1) = "\") или (Прав(путь_, 1) = "/")
   // Теперь посмотрим наличие файла/каталога
   Если ФС.СуществуетФайл(путь_) = 0 Тогда
       возврат 0;
   ИначеЕсли _чтоИщем = 2 Тогда
       // Итак, мы уверены, что что-то есть, а раз не важно,
       // что именно, то и вернем единичку
       возврат 1;
   Иначе
       // Файл/каталог существует, теперь выясним, файл это или каталог
       атрибуты_="";
       ФС.АтрибутыФайла(путь_,"",атрибуты_);
       файлЛи_ = глНе(Число(Сред(атрибуты_,4,1)));
       Возврат ((файлЛи_+_чтоИщем) % 2);
   КонецЕсли; //ФС.СуществуетФайл(_каталог) = 0    
КонецФункции //глСуществуетКаталог
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.