Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 июл 2021, 15:40

Метод НайтиФайлы()

Автор neek666, 17 июн 2021, 05:43

0 Пользователей и 1 гость просматривают эту тему.

neek666

Добрый день!
Народ, на клиенте метод НайтиФайлы() возвращает имя каталога, вместо файлов, хранящихся в нем. В чем прикол?
Делаю так:
НайденныеФайлы = НайтиФайлы(ПутьКФайлу); //формируется массив с найденными файлами (так по идеи должно быть)
Для каждого НайденныйФайл из НайденныеФайлы цикл
------//в массиве только одна структура с именем каталога. На этом все.
КонецЦикла;
В отладчике смотрел, в переменной ПутьКФайлу путь верный, каким и должен быть, вида:
"C:\Program Files (x86)" - ну только естественно без пробеллов.
Пробовал с обратными слешами вида "/", результат тот же.

neek666

Глобальный контекст (Global context)
НайтиФайлы (FindFiles)
Синтаксис:
НайтиФайлы(<Путь>, <Маска>, <ИскатьВПодкаталогах>)
Параметры:
<Путь> (обязательный)
Тип: Строка.
Путь к каталогу, в котором производится поиск. Каталог может быть как на локальной сети, так и на ftp-сервере. При использовании этой схемы в адресах необходимо указывать прямые слеши '/', а не обратные '\'.
Допускается указание полного имени файла (путь + имя).
<Маска> (необязательный)
Тип: Строка.
Маска выбора файлов.
Если параметр задан, то первый параметр воспринимается системой как путь к каталогу, в котором требуется найти файлы, удовлетворяющие маске выбора.
Для операционной системы MS Windows:
В строке маски, помимо обычных символов, допускается использование символа "*" (звездочка), обозначающего любое число произвольных символов, и "?" (знак вопроса), обозначающего один произвольный символ.
Примеры строки:
"отчет201?.docx",
"*.pdf".

Для операционных систем Linux, macOS, iOS и Android:
В строке маски допускается использование следующих последовательностей:
любой символ, допустимый в имени файла. Сопоставление указанных символов производится:
для Linux, macOS - с учетом регистра,
для iOS и Android - без учета регистра;
"*" (звездочка) - любая последовательность символов;
"?" (знак вопроса) - любой символ;
"[" - класс символов. После открывающей квадратной скобки указывается последовательность символов. Шаблон соответствует любому из указанных символов. Можно указывать диапазон, используя "-". Описание класса символов завершается "]". Для указания "-" в качестве символа класса нужно указать его первым или последним символом. Если после "[" указан знак "!", то класс описывает все символы, кроме указанных.
Пример строки:
"Все файлы|*.*|Документы|???.docx;*.[Rr][Ff];doc[0-9].txt".
<ИскатьВПодкаталогах> (необязательный)
Тип: Булево.
Истина - будет произведен обход вложенных в параметр <Путь> каталогов и поиск в них.
Параметр игнорируется, если не задан параметр <Маска>, т.к. предполагается, что ищется один файл.
Значение по умолчанию: Ложь.
Возвращаемое значение:
Тип: Массив.
Массив из значений типа Файл, содержащий найденные файлы.
Описание:
Осуществляет поиск файлов и каталогов по заданной маске, расположенных в заданном каталоге.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Примечание:
Все искомые объекты должны находиться в одном каталоге.
Для работы метода на веб-клиенте необходимо предварительно подключить расширение работы с файлами.
Пример:
НайденныеФайлы = НайтиФайлы("C:\Temp", "*.cdx");
См. также:
Глобальный контекст, метод НачатьПоискФайлов
Глобальный контекст, метод НайтиФайлыАсинх
Использование в версии:
Доступен, начиная с версии 8.0.
Описание изменено в версии 8.3.18.

neek666

На инфостарте на одном из форумов описан такой способ:
ИмяКаталога = "C:\Users\Desktop\Тест";
    ИскатьВПодкаталогах = Истина;
   
    МассивМасок = Новый Массив;
    МассивМасок.Добавить("*.txt");
    МассивМасок.Добавить("*.xlsx");
   
    МассивФайлов = Новый Массив;   
    Для Каждого Маска Из МассивМасок Цикл
            ОбщегоНазначения.ЗаполнитьМассивУникальнымиЗначениями(МассивФайлов, НайтиФайлы(ИмяКаталога, Маска, ИскатьВПодкаталогах));
    КонецЦикла;   
   
    Если МассивФайлов.Количество() > 0 Тогда         
        Для Каждого ЭлементФайл Из МассивФайлов Цикл             
            Сообщить(ЭлементФайл.Имя); 
            // тут ваша обработка каждого файла
        КонецЦикла;               
    Иначе
        Сообщить("Файлы не найдены.");       
    КонецЕсли;

У меня точно так же. Но возвращает он каталог, в котором идет поиск. А мне надо файлы!

neek666

Если внутри цикла ставлю:
ПолныйПутьКФайлу = НайденныйФайл.ПолноеИмя;

То возвращется ПУТЬ К КАТАЛОГУ!

neek666

Япона мать. Это что, если не указать МАСКУ, то ищет только каталог? Файлы возвращает только при указании маски? А где об этом хоть что нибудь написано?

antoneus

Вот же:

<Маска> (необязательный)
Тип: Строка.
Маска выбора файлов.
Если параметр задан, то первый параметр воспринимается системой как путь к каталогу, в котором требуется найти файлы, удовлетворяющие маске выбора.

<ИскатьВПодкаталогах> (необязательный)
Тип: Булево.
Истина - будет произведен обход вложенных в параметр <Путь> каталогов и поиск в них.
Параметр игнорируется, если не задан параметр <Маска>, т.к. предполагается, что ищется один файл.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск