Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1544/)
-   -   Обработка папки с файлами (http://forums.kuban.ru/f1544/obrabotka_papki_s_fajlami-5136850.html)

Pusto 11.12.2013 13:10

Обработка папки с файлами
 
Если папка с подпапками и файлами в них. Причем в каждой папке есть файл с одним и тем же именем.

Нужно обработать все такие файлы, т.к. важно содержимое каждого из них.


ФС.УстТекКаталог(Путь); // Путь это корневой каталог с подкаталогами

ПапкаФайлов = ФС.НайтиПервыйФайл("*.*");

Вот далее не срабатывает. Потому что ПапкаФайлов равна ".", т.е. выбираются не подкаталоги а корневой каталог). Т.е ничего не работает...

Пока ПустоеЗначение(ПапкаФайлов)=0 Цикл

ОбработкаКаталога(ПапкаФайлов);

ПапкаФайлов = ФС.НайтиСледующийФайл();

КонецЦикла;

как указать в процедуре, наличие подкаталогов?

VZ 11.12.2013 13:34

Открой для себя WSH...
Можно еще почитать ЖКК. Там русским по белому упоминается, что "[em]если задана маска "*.*" для некорневого каталога, первым возвращаемым значением будет "."..... Имя следующего файла будет ".." ....[/em]"

Чучундер 11.12.2013 13:46

В цикле проверить если имяфайла="." или ".." - уйти на выбор следующего файла.
.
по полученному имени файла - используя атрибуты файла - проверить это файл или каталог - если каталог - уходить в рекурсию обработки этого каталога (или как надо иначе)
.
АтрибутыФайла(<?>,,,,,,);
Синтаксис:
АтрибутыФайла(<ИмяФайла>,<РазмерФайла>,<АтрибутыФайла>,<ВремяСоздания>,<ВремяПоследнегоДоступа>,<ВремяПоследнейЗаписи>,<РасширенноеИмяФайла>)
Назначение:
Возвращает атрибуты файла (в параметрах).
Параметры:
<ИмяФайла> - строка с именем файла;
<РазмерФайла> - переменная, принимающая размер файла в байтах;
<АтрибутыФайла> - переменная, принимающая атрибуты файла;
Возвращаемое строковое значение длиной 9 символов, в котором закодированы атрибуты файла. Символы могут принимать значения ''0'' или ''1'':
первый символ: если ''1'' - файл только для чтения;
второй символ: если ''1'' - скрытый файл;
третий символ: если ''1'' - системный файл;
четвертый символ: если ''1'' - каталог;
пятый символ: если ''1'' - архивный файл;
шестой символ: если ''1'' - обычный файл (все другие атрибуты не установлены);
седьмой символ: если ''1'' - временный файл;
восьмой символ: если ''1'' - файл, сжатый каким-либо архиватором;
девятый символ: если ''1'' - нет доступа к файлу.
<ВремяСоздания> - переменная, принимающая строку с датой и временем создания файла;
<ВремяПоследнегоДоступа> - переменная, принимающая строку с датой и временем последнего доступа к файлу;
<ВремяПоследнейЗаписи> - переменная, принимающая строку с датой и временем последней записи файла;
<РасширенноеИмяФайла> - переменная, принимающая строку с полным именем файла.

Подробнее см. в книгу ''1С:Предприятие 7.7. Описание встроенного языка. Часть 2'', глава 37 ''Работа с Файлами''.

Чучундер 11.12.2013 13:47

относительно надысь писал в выгрузку каталога с подкаталогами и файлами в дропбокс. как раз рекурсивно. работает. Чел приезжает к заказчику - тыкает в планшет и говорит "хочу вот это".. ;-)

user1C 11.12.2013 13:53

...
Атриб="";
ИмяФайла=ФС.НайтиПервыйФайл("*");
Пока ПустоеЗначение(ИмяФайла)=0 Цикл
Если Лев(ИмяФайла,1)="." Тогда ИмяФайла=ФС.НайтиСледующийФайл();Продолжить;КонецЕсли;
ФС.АтрибутыФайла(ИмяФайла,,Атриб);
Если Сред(Атриб,4,1)="1" Тогда
// кталог
Иначе
// файл
КонецЕсли;
ИмяФайла=ФС1.НайтиСледующийФайл();
КонецЦикла;

Pusto 11.12.2013 14:18

4. В Пока ПустоеЗначение(ИмяФайла)=0 Цикл - не попадает.
т.к. ПустоеЗначение(ИмяФайла)=1
ИмяФайла=ФС.НайтиПервыйФайл("*") // ИмяФайла = "."

user1C 11.12.2013 14:24

(5)
???
ПустоеЗначение(".") = 0

VZ 11.12.2013 15:40

5-Pusto > Не путай ПустоеЗначение() с "Я не этого хотел".


Текущее время: 18:16. Часовой пояс GMT +3.