1с как найти все файлы в каталоге

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

&НаСервере
Процедура ЧтениеИЗаписьФайловНаСервере()
 
    /// Как записать произвольное значение в файл в 1с 8.3, 8.2
 
    // любое сериализуемое (то есть превращаемое 
    // в строку и обратно) значение можно сохранять
    // в файл, например, массивы, списки значений, строки
    // структуры и т.д.
    Числа = Новый Массив;
    Числа.Добавить(35);
    Числа.Добавить(67);
    ЗначениеВФайл("c:числа.txt", Числа);
    // эта функция работает только на сервере
 
    /// Как восстановить произвольное значение из файла в 1с 8.3, 8.2    
 
    ЧислаИзФайла = ЗначениеИзФайла("c:числа.txt");
    Сообщить(ЧислаИзФайла[0]); // 35
    Сообщить(ЧислаИзФайла[1]); // 67
 
    /// Как записать текстовый файл в 1с 8.3, 8.2
 
    // работает как на сервере, так и на клиенте
    Текст = Новый ЗаписьТекста(
        "c:привет.txt", // имя
        КодировкаТекста.ANSI, // кодировка
        Символы.ПС, // разделитель строк (необ.)
        Ложь // перезаписывать файл, а не дописывать в конец (необ.)
    );    
    Текст.ЗаписатьСтроку("Добро пожаловать!");
    Текст.ЗаписатьСтроку("Посторонним вход воспрещен.");
    Текст.Закрыть();
 
    /// Как прочитать текстовый файл в 1с 8.3, 8.2
 
    // работает как на сервере, так и на клиенте
    Текст = Новый ЧтениеТекста(
        "c:привет.txt", // имя
        КодировкаТекста.ANSI, // кодировка
        Символы.ПС, // разделитель строк (необ.)
        ,
        Истина // монопольный режим (необ.)
    );
 
    // читаем пока есть что читать
    Пока Истина Цикл
        Строка = Текст.ПрочитатьСтроку();
        Если Строка = Неопределено Тогда
            Прервать;
        Иначе
            Сообщить(Строка);
        КонецЕсли;
    КонецЦикла;
 
КонецПроцедуры
 
&НаКлиенте
Процедура ОперацииНадФайлами(Команда)
 
    // для тестов создадим пустой файл
 
    Текст = Новый ЗаписьТекста("c:file_src.txt");
    Текст.Закрыть();
 
    /// Как проверить существование файла в 1С 8.3, 8.2    
 
    ФайлНаДиске = Новый Файл("c:file_src.txt");
    Если ФайлНаДиске.Существует() Тогда
        Сообщить("c:file_src.txt существует");
    КонецЕсли;
 
    /// Как скопировать файл в 1с 8.3, 8.2 
 
    КопироватьФайл(
        "c:file_src.txt", // что копируем
        "c:file_dest.txt" // куда копируем
    ); // перезапишет, если уже есть такой файл
 
    /// Как переместить файл в 1с 8.3, 8.2 
 
    ПереместитьФайл(
        "c:file_dest.txt",
        "c:file_new.txt"
    ); // перезапишет, если уже есть такой файл
 
    /// Как найти файлы в каталоге в 1с 8.3, 8.2 
 
    // возвращает массив значений типа Файл
    МассивНайденныхФайлов = НайтиФайлы(
        "c:", // где искать
        "*.txt", // маска поиска
        Ложь // если Истина, то будет искать и в подкаталогах
    );
 
    Для Каждого Файл Из МассивНайденныхФайлов Цикл
        Сообщить("Найден " + Файл.ПолноеИмя);
    КонецЦикла;
 
    /// Как удалить файл в 1с 8.3, 8.2
 
    // если файл readonly - будет ошибка
    УдалитьФайлы(
        "c:file_new.txt"
    );
 
    /// Как удалить файлы в каталоге по маске в 1с 8.3, 8.2
 
    // поиск в каталоге нерекурсивный
    УдалитьФайлы(
        "c:helpme1c", // заведомо не существующий каталог
        "*.txt" // маска для поиска удаляемых файлов
    ); // если опустить маску, то удалятся все файлы и каталог
 
    /// Как получить имя временного файла в 1с 8.3, 8.2
 
    Сообщить(
        ПолучитьИмяВременногоФайла()
    ); // например, c:Tempv8_11AE_4.tmp
 
    Сообщить(
        ПолучитьИмяВременногоФайла(".txt")
    ); // например, c:Tempv8_11AE_5.txt
 
    /// Как прочитать атрибуты файла в 1с 8.3, 8.2
 
    Ф = Новый Файл("c:file_src.txt");
 
    // время последнего изменения файла
    Сообщить(Ф.ПолучитьВремяИзменения());
 
    // проверяем атрибут только чтение
    Сообщить(Ф.ПолучитьТолькоЧтение());
 
    // проверяем атрибут hidden (скрытность, невидимость)
    Сообщить(Ф.ПолучитьНевидимость());
 
    /// Как установить атрибуты файла в 1с 8.3, 8.2
 
    // меняем время последнего изменения файла
    Ф.УстановитьВремяИзменения(ТекущаяДата());
 
    // меняем атрибут только чтение
    Ф.УстановитьТолькоЧтение(Ложь);
 
    // меняем атрибут невидимости
    Ф.УстановитьНевидимость(Ложь);
 
    /// Как узнать размер файла в 1с 8.3, 8.2
 
    Сообщить(Ф.Размер()); // в байтах
 
    // Как узнать по пути файл это или каталог в 1с 8.3, 8.2
    Если Ф.ЭтоКаталог() Тогда
        Сообщить("Это каталог");
    ИначеЕсли Ф.ЭтоФайл() Тогда
        Сообщить("Это файл");
    КонецЕсли;
 
    /// Как вытащить расширение файла из его пути в 1с 8.3, 8.2
 
    Сообщить(Ф.Расширение); // .txt
 
    /// Как вытащить имя файла без расширения в 1с 8.3, 8.2
 
    Сообщить(Ф.ИмяБезРасширения); // file_src
 
КонецПроцедуры
 
&НаКлиенте
Процедура ОперацииНадКаталогами(Команда)
 
    /// Как создать каталог в 1с 8.3, 8.2
 
    // каталог может уже существовать
    СоздатьКаталог("c:new_dir");
 
    // создадутся все подкаталоги
    СоздатьКаталог("c:new_dir23");
 
    /// Как проверить существование каталога в 1с 8.3, 8.2
 
    КаталогНаДиске = Новый Файл("c:new_dir");
    Если КаталогНаДиске.Существует() Тогда
        Сообщить("Папка c:new_dir существует");
    КонецЕсли;    
 
    /// Как удалить каталог вместе с содержимым в 1с 8.3, 8.2
 
    УдалитьФайлы("c:new_dir");
    // мы опустили маску, поэтому удалятся все файлы
    // внутри каталога, а также сам каталог
 
    /// Как получить каталог временных файлов в 1с 8.3, 8.2
 
    Сообщить(
        КаталогВременныхФайлов()
    ); // например, c:temp
 
КонецПроцедуры
 
&НаКлиенте
Процедура РаботаСВременнымХранилищем(Команда)
 
    // временное хранилище - объект, в который мы можем помещать
    // и считывать данные произвольного типа,
    // доступ к которому есть и на сервере и на клиенте
    // это позволяет передавать между сервером и клиентом
    // данные, которые иначе не передать
 
    /// Как сохранить произвольное значение во временное
    /// хранилище в 1с 8.3, 8.2
 
    Список = Новый СписокЗначений;
    Список.Добавить("Владивосток");
    Список.Добавить("Хабаровск");
    Список.Добавить("Петропавловск-Камчатский");
 
    АдресВХранилище = ПоместитьВоВременноеХранилище(
        Список // произвольные данные        
    );
 
    /// Как прочитать произвольное значение из временного
    /// хранилища в 1с 8.3, 8.2
 
    СписокИзХранилища = ПолучитьИзВременногоХранилища(АдресВХранилище);
    Если СписокИзХранилища = Неопределено Тогда
        Сообщить("Значение по этому адресу уже удалено из хранилища.");
    Иначе
        Сообщить(СписокИзХранилища[0]); // Владивосток
    КонецЕсли;
 
    /// Как перезаписать уже сохраненное значение во временном
    /// хранилище в 1с 8.3, 8.2
 
    Массив = Новый Массив;
    Массив.Добавить(10);
    Массив.Добавить(20);
 
    ПоместитьВоВременноеХранилище(
        Массив,
        АдресВХранилище
    );
 
    /// Сколько времени хранится значение, сохраненное во
    /// временном хранилище в 1с 8.3, 8.2
 
    // всё зависит от второго параметра функции ПоместитьВоВременноеХранилище
 
    // #1 если туда в качестве адреса был передан уникальный идентификатор формы
    // или уже существующий адрес в хранилище, то значение будет автоматически
    // удалено после закрытия формы
 
    // #2 если туда в качестве адреса передан уникальный идентификатор, не
    // являющийся уникальным идентификатором формы, то значение будет
    // автоматически удалено только после завершения сеанса пользвоателя    
 
    // #3 если адрес не указан, помещенное значение будет удалено после
    // очередного запроса сервера    
 
    // см. примеры ниже
 
    /// Как сохранить значение во временное хранилище на всё
    /// время жизни формы в 1с 8.3, 8.2
 
    ПоместитьВоВременноеХранилище(
        Массив,
        ЭтаФорма.УникальныйИдентификатор
    );
 
    /// Как сохранить значение во временное хранилище на всё
    /// время сеанса пользователя в 1с 8.3, 8.2
 
    АдресВХранилище = ПоместитьВоВременноеХранилище(
        Массив,
        Новый УникальныйИдентификатор
    );
 
    /// Как удалить значение из временного хранилища в 1с 8.3, 8.2
 
    УдалитьИзВременногоХранилища(АдресВХранилище);
 
    /// Как узнать является ли строка адресом во временном хранилище
    /// в 1с 8.3, 8.2
 
    Если ЭтоАдресВременногоХранилища(АдресВХранилище) Тогда
        Сообщить("Да, это адрес во временном хранилище.");
    КонецЕсли;
 
КонецПроцедуры
 
/// Как передать файл с клиента на сервер в 1с 8.3, 8.2
 
&НаКлиенте
Процедура ПередачаФайлаСКлиентаНаСервер(Команда)
 
    // создадим тестовый файл для передачи
    Текст = Новый ЗаписьТекста("c:test.txt");
    Текст.ЗаписатьСтроку("Привет,");
    Текст.ЗаписатьСтроку("Мир!");
    Текст.Закрыть();
 
    ОповещениеОЗавершении = Новый ОписаниеОповещения(
        "ВыполнитьПослеПомещенияФайла", ЭтотОбъект
    );    
 
    НачатьПомещениеФайла(
        ОповещениеОЗавершении,
        , // адрес в хранилище
        "c:test.txt", // имя файла
        Ложь, // интерактивно
        ЭтаФорма.УникальныйИдентификатор
    );
    // если опустить последний параметр, то помещенный файл
    // будет удален после очередного запроса сервера
    // а если указать - то только после удаления объекта формы
 
    // если нужно предоставить пользователю возможность
    // выбрать файл самому четвёртый параметр (интерактивно)
    // нужно установить в Истина
 
КонецПроцедуры
 
&НаКлиенте
Процедура ВыполнитьПослеПомещенияФайла(Результат, Адрес,
    ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
 
    Если Результат Тогда
 
        // сохраним полученный адрес в реквизит формы
        АдресФайлаВХранилище = Адрес;
 
        Сообщить(
            "Наконец-то! Файл " +
            ВыбранноеИмяФайла + " передан на сервер и сохранён во " +
            "временном хранилище по адресу " + Адрес);
 
    Иначе
 
        Сообщить("Не удалось передать файл на сервер.");
 
    КонецЕсли;
 
КонецПроцедуры
 
/// Как прочитать файл на сервере из временного хранилища
/// в 1с 8.3, 8.2
 
&НаСервере
Процедура ПрочитатьФайлНаСервереИзХранилищаНаСервере()
 
    Если АдресФайлаВХранилище = "" Тогда
        Сообщить("Сначала нужно передать файл с клиента на сервер.");
        Возврат;
    КонецЕсли;
 
    ДвоичныеДанные = 
        ПолучитьИзВременногоХранилища(АдресФайлаВХранилище);
 
    Если ДвоичныеДанные = Неопределено Тогда
        Сообщить("Похоже файл уже был удалён из хранилища.");
        Возврат;
    КонецЕсли;
 
    ДвоичныеДанные.Записать("c:server.txt");
 
    Текст = Новый ЧтениеТекста("c:server.txt");
    Пока Истина Цикл
        Строка = Текст.ПрочитатьСтроку();
        Если Строка = Неопределено Тогда
            Прервать;
        Иначе
            Сообщить(Строка);
        КонецЕсли;
    КонецЦикла;
 
КонецПроцедуры
 
/// Как передать файл с сервера на клиент в 1с 8.3, 8.2
 
&НаКлиенте
Процедура ПередатьФайлССервераНаКлиент(Команда)
 
    Если АдресФайлаВХранилище = "" Тогда
        Сообщить("Сначала нужно сохранить файл на сервере.");
        Сообщить("Воспользуйтесь кнопкой 'Передача файла с клиента...'");
        Возврат;
    КонецЕсли;
 
    ОповещениеОЗавершении = Новый ОписаниеОповещения(
        "ВыполнитьПослеПолученияФайлов", ЭтотОбъект
    );
 
    ПолучаемыеФайлы = Новый Массив;
    ПолучаемыеФайлы.Добавить(
        Новый ОписаниеПередаваемогоФайла(
            "c:from_server.txt", // куда сохранять на клиента
            АдресФайлаВХранилище // адрес в хранилище на сервере
        )
    );
 
    НачатьПолучениеФайлов(
        ОповещениеОЗавершении,
        ПолучаемыеФайлы,
        ,
        Ложь // интерактивно
    );
 
КонецПроцедуры
 
&НаКлиенте
Процедура ВыполнитьПослеПолученияФайлов(ПолученныеФайлы,
    ДополнительныеПараметры) Экспорт
 
    Для Каждого Файл Из ПолученныеФайлы Цикл
        Сообщить("Получен " + Файл.Имя + " из " + Файл.Хранение);
    КонецЦикла;
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

Как программно получить все файлы в указанном каталоге.

Я
   Maniac

05.10.09 — 13:18

Живого примера не нашел.

На форме обработки указывается каталог. нужно чтобы 1С смогла получить все файлы в каталоге.

   Aprobator

1 — 05.10.09 — 13:20

щаз в СП гляну.

   bvn13

2 — 05.10.09 — 13:21

НайтиФайлы (FindFiles)
Глобальный контекст
НайтиФайлы (FindFiles)
Синтаксис:
НайтиФайлы(<Путь>, <Маска>)
Параметры:
<Путь> (обязательный)
Тип: Строка. Путь к каталогу, в котором производится поиск. Каталог может быть как на локальной сети, так и на ftp-сервере. При использовании этой схемы в адресах необходимо указывать прямые слеши ‘/’, а не обратные ».
Допускается указание полного имени файла (путь+имя).
<Маска> (необязательный)
Тип: Строка. Маска выбора файлов. В строке маски допускается использование символа «*» (звездочка), обозначающего любое число произвольных символов, и «?» (знак вопроса), обозначающего один произвольный символ.
Если параметр задан, то первый параметр воспринимается системой как путь к каталогу, в котором требуется найти файлы, удовлетворяющие маске выбора.
Возвращаемое значение:
Тип: Массив. Массив из значений типа Файл, содержащий найденные файлы.
Описание:
Осуществляет поиск файлов и каталогов по заданной маске, расположенных в заданном каталоге.
Примечание:
Все искомые объекты должны находиться в одном каталоге.
Пример:
НайденныеФайлы = НайтиФайлы(«C:Temp», «*.cdx»);

   Maniac

3 — 05.10.09 — 13:22

(2) спасибо.

   Один С

4 — 05.10.09 — 13:22

ТЗ.Очистить();

   Файлы = НайтиФайлы(ИмяКаталога, «*.*»);

   Для Каждого ФФ из Файлы Цикл

       Если ФФ.ЭтоКаталог() Тогда

           Продолжить;

       КонецЕсли;    

       НС = ТЗ.Добавить();

       НС.Файл = ФФ.Имя;

       НС.Размер = ФФ.Размер();

       НС.ПолныйПуть = ФФ.ПолноеИмя;

       НС.ДатаИзменения = ФФ.ПолучитьВремяИзменения();

   КонецЦикла;

   Armando

5 — 01.11.09 — 21:40

Помню заморачивался))

Вопрос по FileSystemObject

   Maniac

6 — 01.11.09 — 21:41

(5) ты б это. еще бы в годовалую ветку что нибудь написал.

   Armando

7 — 01.11.09 — 21:54

(6) Блин, жена за компом сидела. Говорит смотрела что за сайт у меня постоянно открыт)) После нее на странице был список тем, в том числе эта. Я даже на дату не посмотрел. Она говорит сама не знает куда нажала. Судя по всему как-то на твои темы попала)

  

Фокусник

8 — 01.11.09 — 22:19

(7) видимо в личку смотрела ;)

Следующие функции языка 1С позволяют манипулировать файлами:

  • СоздатьКаталог 1С
  • НайтиФайлы 1С
  • КопироватьФайл 1С
  • ПереместитьФайл 1С
  • УдалитьФайлы 1С
  • РазделитьФайл 1С
  • ОбъединитьФайлы 1С.

Работа с каталогами — СоздатьКаталог 1С


//создает недостающие каталоги в указанном пути
//если каталога нет – создаст всю вложенную структуру
//если есть D:Temp, то создаст подкаталоги
СоздатьКаталог("D:Temp123")

Поиск файлов — НайтиФайлы 1С


//найти все файлы 1С в каталоге «Sc»
НайденныеФайлы = НайтиФайлы("D:Sc", "*");

//найти все ТЕКСТОВЫЕ файлы 1С в каталоге, включая вложенные подкаталоги
НайденныеФайлы = НайтиФайлы("D:Sc", "*.txt", Истина);

//найти все файлы 1С в каталоге, в имени которых встречается слово "копия"
НайденныеФайлы = НайтиФайлы("D:Sc", "*копия*");

//найти все файлы 1С в каталоге, в имени которых встречается любая цифра в скобочках, например "(1)" или "(100)"
НайденныеФайлы = НайтиФайлы("D:Sc", "*(*)*");

//найти все файлы 1С в каталоге, в имени которых встречается цифра в скобочках меньше 10, например "(1)" или "(9)"
НайденныеФайлы = НайтиФайлы("D:Sc", "*(?)*");

Для каждого Файл из НайденныеФайлы Цикл
     Если Файл.ЭтоКаталог() Тогда
          Продолжить;
     КонецЕсли;

     
     ИмяФайла = Файл.ПолноеИмя;

     
     Сообщить(ИмяФайла);
КонецЦикла;

Копирование, перемещение и удаление файлов — КопироватьФайл 1С, ПереместитьФайл 1С, УдалитьФайлы 1С


ИмяФайла = "Текстовый файл.txt";
КаталогИсточник = "D:sc";
КаталогПриемник = "D:";

//копирование файла
ФайлИсточник = Новый Файл(КаталогИсточник + ИмяФайла);
Если не ФайлИсточник.Существует() или ФайлИсточник.ЭтоКаталог() Тогда
     ВызватьИсключение "Файл '" + КаталогИсточник + ИмяФайла + "' не существует или является каталогом";
КонецЕсли;

Попытка
     КопироватьФайл(КаталогИсточник + ИмяФайла, КаталогПриемник + ИмяФайла);
Исключение
     ВызватьИсключение "Нет прав на копирование файла";
КонецПопытки;

ФайлПриемник = Новый Файл(КаталогПриемник + ИмяФайла);
Если не ФайлПриемник.Существует() или ФайлПриемник.Размер() <> ФайлИсточник.Размер() Тогда
     ВызватьИсключение "Не удалось корректно скопировать файл";
КонецЕсли;

//перемещение файла
Попытка
     ПереместитьФайл(КаталогИсточник + ИмяФайла, КаталогПриемник + ИмяФайла);
Исключение
     ВызватьИсключение "Нет прав на копирование файла";
КонецПопытки;

ФайлПриемник = Новый Файл(КаталогПриемник + ИмяФайла);
Если не ФайлПриемник.Существует() Тогда
     ВызватьИсключение "Не удалось корректно перенести файл";
КонецЕсли;

Разделение и слияние файлов — РазделитьФайл 1С, ОбъединитьФайлы 1С


//функция создает каталог с именем файла
//в нем создает разделенные части файла, каждая размером в указанное кол-во мегабайт
//каждую часть сжимает архиватором
//возвращает имя каталога

Загрузка…

Платформа 1С:Предприятие 8.3 предоставляет большой выбор инструментов для работы с файлами. В данной статье будут рассмотрены основные функции по работе с файлами.

Поиск файлов

Для поиска файлов во встроенном языке существует метод НайтиФайлы, метод доступен в Тонком клиенте, веб-клиенте, мобильном клиенте, через сервер, толстый клиент, а также внешнее соединение, мобильное приложение (клиент) и мобильное приложение (сервер).

Планшет

Приглашаем на
бесплатный вебинар!

06 июня в 11:00 мск

1 час

Метод принимает на вход путь к каталогу, в котором будет производиться поиск, маска имени для поиска файлов, флаг – «Искать в подкаталогах»:

НайтиФайлы(<Путь>, <Маска>, <ИскатьВПодкаталогах>)

Функция возвращает массив, элементы которого объекты типа Файл.

Пример кода:


Файлы = НайтиФайлы("C:", "*.doc", Ложь);
Для Каждого Ф Из Файлы Цикл
 	Сообщить(Ф.Имя); 	
КонецЦикла;

В результате работы алгоритма будут выведены имена всех doc-файлов, содержащихся на диске C:. Если последний параметр указать «истина», будут найдены все файлы во всех подчиненных каталогах. Несколько дополнительных слов по маске поиска, в ОС Windows допускается использовать символы «*» – любые символы в любом количестве и «?» – любой один символ. Сочетать несколько масок недопустимо. В других ОС (Linux, macOS, iOS, Android) маску можно задавать более гибко, подробнее можно посмотреть в справке по языку.

Объект «Файл»

Объект Файл является основным объектом для работы с файлом. Конструктор объекта принимает полное имя файла.

Свойства объекта:

  • Имя
  • ИмяБезРасширения
  • ПолноеИмя
  • Путь
  • Расширение

Методы объекта:

  • НачатьПолучениеВремениИзменения
  • НачатьПолучениеКартинкиПредставленияФайлаБиблиотекиМобильногоУстройства
  • НачатьПолучениеНевидимости
  • НачатьПолучениеРазмера
  • НачатьПолучениеТолькоЧтения
  • НачатьПолучениеУниверсальногоВремениИзменения
  • НачатьПроверкуСуществования
  • НачатьПроверкуЭтоКаталог
  • НачатьПроверкуЭтоФайл
  • НачатьУстановкуВремениИзменения
  • НачатьУстановкуНевидимости
  • НачатьУстановкуТолькоЧтения
  • НачатьУстановкуУниверсальногоВремениИзменения
  • ПолучитьВремяИзменения
  • ПолучитьКартинкуПредставленияФайлаБиблиотекиМобильногоУстройства
  • ПолучитьНевидимость
  • ПолучитьПредставлениеФайлаБиблиотекиМобильногоУстройства
  • ПолучитьТолькоЧтение
  • ПолучитьУниверсальноеВремяИзменения
  • Размер
  • Существует
  • УстановитьВремяИзменения
  • УстановитьНевидимость
  • УстановитьТолькоЧтение
  • УстановитьУниверсальноеВремяИзменения
  • ЭтоКаталог
  • ЭтоФайл

Некоторые методы по своей сути делают одно и то же действие, например, НачатьУстановкуТолькоЧтения и УстановитьТолькоЧтение. Методы, которые начинаются с «Начать*», предназначены для работы в асинхронном режиме, они доступны только на клиентах, а вот их «братья» доступны и на сервере. При работе на клиенте с файлами рекомендуется использовать асинхронные методы, однако методы без префикса «Начать» также доступны на клиенте. При использовании таких методов в веб-клиенте нужно будет подключать расширение по работе с файлами (как это сделать, будет рассмотрено ниже в статье).

Пример кода работы с объектом Файл:


Файлы = НайтиФайлы("C:", "*.doc", Ложь);
Для Каждого Ф Из Файлы Цикл
 	ЕслиУстановитьТолькоЧтение(Ф);
КонецЦикла;
 
&НаКлиенте
Процедура ЕслиУстановитьТолькоЧтение(Файл)
 	Если Файл.Существует() И Файл.ЭтоФайл() И Файл.Размер() > 0 Тогда
      	Файл.УстановитьТолькоЧтение(Истина);
 	КонецЕсли;
КонецПроцедуры

Данный код устанавливает признак только чтения у всех файлов “*.doc” на диске C:.

Пример этого же алгоритма, но с использованием асинхронных методов:


&НаКлиенте
Процедура ЕслиУстановитьТолькоЧтение(Файл)
 	ОО = Новый ОписаниеОповещения("ЗавершитьПроверкуСуществования", ЭтаФорма, Новый Структура("Файл", Файл));
 	Файл.НачатьПроверкуСуществования(ОО);
КонецПроцедуры
 
&НаКлиенте
Процедура ЗавершитьПолучениеРазмера(Размер, ДопПараметры) Экспорт
 	Перем Файл;
 	
 	ДопПараметры.Свойство("Файл", Файл);
 	Если Размер > 0 И Файл  Неопределено Тогда
      	ОО = Новый ОписаниеОповещения("ЗавершитьПроверкуЭтоФайл", ЭтаФорма, Новый Структура("Файл", Файл));
      	Файл.НачатьПроверкуЭтоФайл(ОО);
 	КонецЕсли;
КонецПроцедуры
 
&НаКлиенте
Процедура ЗавершитьПроверкуСуществования(Существует, ДопПараметры) Экспорт
 	Перем Файл;
 	
 	ДопПараметры.Свойство("Файл", Файл);
 	Если Существует И Файл  Неопределено Тогда
      	ОО = Новый ОписаниеОповещения("ЗавершитьПолучениеРазмера", ЭтаФорма, Новый Структура("Файл", Файл));
      	Файл.НачатьПолучениеРазмера(ОО);
 	КонецЕсли;
КонецПроцедуры
 
&НаКлиенте
Процедура ЗавершитьПроверкуЭтоФайл(ЭтоФайл, ДопПараметры) Экспорт
 	Перем Файл;
 	
 	ДопПараметры.Свойство("Файл", Файл);
 	Если ЭтоФайл И Файл  Неопределено Тогда
      	ОО = Новый ОписаниеОповещения("ЗавершитьУстановкуТолькоЧтения", ЭтаФорма);
      	Файл.НачатьУстановкуТолькоЧтения(ОО, Истина); 
 	КонецЕсли;
КонецПроцедуры
 
&НаКлиенте
Процедура ЗавершитьУстановкуТолькоЧтения(ДопПараметры) Экспорт
 	Сообщить("Флаг только чтение установлен"); 	
КонецПроцедуры

Писать асинхронный код очень неудобно, он получается громоздкий, но именно асинхронный подход надо применять, а особенно – при разработке для web клиента.

Работа с файлами в клиент-серверной архитектуре

При работе в клиент-серверной архитектуре мы не можем работать с файлом на сервере, который был выбран на клиенте, т.к. сервер и клиент – это физически две разных машины. Чтобы решить эту проблему, мы должны передать файл из клиента на сервер, используя временное хранилище.

Пример синхронного кода:


Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
 	Диалог.МножественныйВыбор = Ложь;
 	Если Диалог.Выбрать() ТОгда
      	Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла), ЭтаФорма.УникальныйИдентификатор);
      	ОбработкаФайлаНаСервере(Адрес);
КонецЕсли;
 
&НаСервереБезКонтекста
Процедура ОбработкаФайлаНаСервере(АдресВХ)
 	ДД = ПолучитьИзВременногоХранилища(АдресВХ);  
 	Если ДД  Неопределено Тогда
      	// работа с данными.
 	КонецЕсли;
КонецПроцедуры

Для передачи файлов существуют также такие асинхронные методы, как:

  • НачатьПомещениеФайла
  • НачатьПомещениеФайлов

Вместо функции ПолучитьИзВременногоХранилища также можно использовать функцию ПолучитьФайл.

Работа с файлами в web-клиенте

Для работы с файлами в веб-клиенте необходимо расширение работы с файлами, делается это функциями:

  • НачатьУстановкуРасширенияРаботыСФайлами
  • НачатьПодключениеРасширенияРаботыСФайламиЗавершение

Legacy методы:

  • УстановитьРасширениеРаботыСФайлами
  • ПодключитьРасширениеРаботыСФайлами

В БСП (подсистема ПодключаемоеОборудование) уже есть метод, который использует указанные выше функции.


МенеджерОборудованияКлиент.ПроверитьДоступностьРасширенияРаботыСФайлами (ОповещениеПриЗавершении, ПредлагатьУстановку = Истина)

Если у вас используется web клиент, рекомендуется использовать следующую конструкцию:


#Если ВебКлиент Тогда
	ОписаниеОповещения = Новый ОписаниеОповещения("callback_функция", ЭтотОбъект, ДопПараметры);
	ПроверитьДоступностьРасширенияРаботыСФайлами(ОписаниеОповещения, Ложь);
#Иначе
	// В тонком и толстом клиентах расширение подключено всегда.
	// выполняем работу с файлами
#КонецЕсли

Выполняет поиск файлов в заданном каталоге

Синтаксис

Функция НайтиФайлы() имеет следующий синтаксис:

Массив НайтиФайлы(Путь, [Маска], [ИскатьВПодкаталогах])

А также альтернативный англоязычный синтаксис:

Array FindFiles(Path, [Mask], [IncSubdir])

Параметры

Описание параметров функции НайтиФайлы():

Имя параметра* Тип Описание
Путь Строка Путь к каталогу, в котором производится поиск или полное имя искомого файла.

Если каталог находится на компьютере пользователя или в локальной сети, в пути необходимо указывать обратный слеш

Если каталог находится на ftp-сервере, в пути необходимо указывать прямые слеши /

Маска Строка Маска поиска файлов.
Если этот параметр задан, то параметр <Путь> воспринимается системой как путь к каталогу, в котором требуется найти файлы, удовлетворяющие этой маске поиска.
ИскатьВПодкаталогах Булево Признак поиска в подкаталогах:
Истина — будет произведен обход вложенных каталогов.
Ложь — поиск в подкаталогах производиться не будет.
Параметр игнорируется если не задан параметр <Маска>, т.к. предполагается что ищется один файл.
*Жирным шрифтом выделены обязательные параметры

Возвращаемое значение

Массив
Массив из значений типа Файл, содержащий найденные файлы.

Описание

Функция НайтиФайлы() выполняет поиск файлов или каталогов по заданной маске поиска, расположенных в заданном каталоге. Всего метод может работать в двух режимах:

  1. Поиск одного файла или каталога (используется только параметр <Путь>);
  2. Поиск группы файлов или каталогов, удовлетворяющих маске поиска (используется минимум 2 параметра: <Путь> и <Маска>);

Внимание! Все искомые файлы (каталоги) должны находиться в одном каталоге.

Внимание!! Для работы метода на веб-клиенте, необходимо предварительно подключить расширение работы с файлами

Доступность

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.

Пример использования

Пример кода с использованием функции НайтиФайлы():

пример скоро будет...

Читайте также:

  1. Программная работа с файлами

Поделиться страницей в соц.сетях

Метки: Метки Работа с файлами

Понравилась статья? Поделить с друзьями:
  • Как найти 15 от числа 3000
  • Как найти фиксиков картинки
  • Как найти скорость в момент столкновения
  • Как найти знак выражения тригонометрия
  • Как найти верблюда на картинке с лицом