Работа с файлами
Общая информация
Все данные на компьютере хранятся в файлах: текстовых, графических, файлах с базами данных и т. д. Практически любое действие, для которого будет писаться сценарий на встроенном языке, будет содержать операции с файлами. В файлы будет записываться журнал выполнения каких-либо действий, в них будут храниться настройки и т. д.
Любой файл (или каталог) характеризуется путем к нему. Путь бывает полным или относительным. Полный путь указывает местоположение файла независимо от того, в каком месте файловой системы мы сейчас находимся. Относительный путь указывает расположение файла относительно рабочего каталога пользователя или текущего каталога приложения. В любом случае путь содержит список каталогов в порядке вложенности этих каталогов, указывающих расположение файла или каталога. Каталоги в описании пути разделяются специальным символом, который называется разделитель. Разные операционные системы используют разные символы в качестве разделителя пути. Однако «1С:Предприятие.Элемент Скрипт» является кроссплатформенной системой, поэтому один и тот же сценарий должен без ошибок работать на любой поддерживаемой операционной системе. В связи с этим при работе с файлами необходимо помнить о следующих особенностях:
- Если путь к файлу задается литералом, то допускается использовать любой разделитель пути, который в принципе допустим на поддерживаемых операционных системах. «1С:Предприятие.Элемент Скрипт» автоматически выполнит установку корректного разделителя для используемой ОС. В этом смысле пути к файлам являются независимыми от  используемой ОС. Однако фактические пути, которые будут получены, например, при использовании экземпляра типа 
Файл, будут содержать разделители пути используемой операционной системы. И в этом смысле пути к файлам являются зависимыми от используемой операционной системы. - Если необходимо выполнять анализ пути к файлу или каталогу, то следует использовать тот символ разделителя, который принят в той операционной системе, где используется сценарий. Этот разделитель можно получить с помощью свойства 
Файлы.СимволРазделителя. - Необходимо помнить, что понятие полного пути на разных операционных системах может существенно различаться. Поэтому желательно передавать нужные пути или в качестве параметров сценария или указывать их через переменные окружения (подробнее).
 
Файл
Во встроенном языке файл описывается с помощью типа Файл. С помощью этого типа с реальным файлом нельзя выполнить практически никаких действий, но зато этот тип предоставляет доступ к информации о файле.
Тип Файл позволяет получить следующую информацию:
- Имя файла — свойство 
Имя. - Имя файла без расширения — свойство 
ИмяБезРасширения. - Расширение файла — свойство 
Расширение. - Полное имя файла (включая путь) — свойство 
Путь. - Каталог, в котором расположен файл, — свойство 
Каталог. - Размер файла — свойство 
Размер. - Признак скрытого файла — свойство 
Скрытый. Файл считается скрытым, если:- OC Linux: имя файла начинается с символа «.» (точка).
 - ОС macOS: имя файла начинается с символа «.» (точка).
 - ОС Windows: для файла установлен атрибут Скрытый (Hidden).
 
 - Момент последнего изменения файла — свойство 
Изменен. - Список подчиненных файлов (если экземпляр 
Файлописывает каталог) — свойствоДочерние. 
С помощью типа Файл вы также можете проверить следующую информацию о файле:
- Это файл? С помощью метода 
ЭтоФайл(). - Это каталог? С помощью метода 
ЭтоКаталог(). - Это ссылка? С помощью метода 
ЭтоСсылка(). Для ОС Windows под термином «ссылка» подразумевается так называемая symbolic link. 
Последней возможностью, которую предоставляет тип Файл, является возможность получить для файла  экземпляры для чтения из файла и записи в файл с помощью методов ОткрытьПотокЧтения() и ОткрытьПотокЗаписи().
Работа с файлами
Чтобы выполнять с файлами какие-либо действия, используется тип Файлы, который доступен через свойство глобального контекста Файлы.
Объект типа Файлы предоставляет достаточно широкие возможности для работы. В случае необходимости создать файл или каталог, нужно использовать соответственно методы Создать() и СоздатьКаталог(). Используя данные методы, следует учитывать, что эти методы автоматически создадут все каталоги, которые указаны в имени создаваемого файла (или каталога), но отсутствуют в реальной файловой системе.
Тип Файлы предоставляет набор методов для выполнения базовых функций работы с файлами:
- Копирование файла — 
Скопировать(). - Перемещение файлов — 
Переместить(). - Переименовать файл — 
Переименовать(). - Удалить файл — 
Удалить(). - Найти файлы — 
Найти(). Поиск файлов настраивается с помощью типаНастройкиПоискаФайлов. Он позволяет указать, что и как будет искать метод (см. Настройка поиска файлов). - Проверить, что указанный каталог не содержит файлов, — 
КаталогПустой(). - Получить домашний каталог текущего пользователя — 
ПолучитьДомашнийКаталогПользователя(). 
Тип Файлы также предоставляет базовый набор методов по работе с временными файлами и каталогами:
- Создание временного файла — 
СоздатьВременныйФайл(). Для временного файла можно указать префикс и суффикс имени временного файла, что позволяет более четко идентифицировать временные файлы по задаче/приложению. Также предоставляется возможность указать, что временный файл должен быть удален после завершения работы текущего процесса. - Создание временного каталога — 
СоздатьВременныйКаталог(). Как и в методе создания временного файла, имеется возможность указать для временного каталога особый префикс и необходимость удалить каталог после окончания работы текущего процесса. 
И временный файл, и временный каталог будут создаваться в каталоге временных файлов, указанном для процесса файловой системы, в котором работает интерпретатор встроенного языка. Каталог временных файлов может быть указан, например, с помощью переменной окружения операционной системы.
Настройка поиска файлов
Поиск файлов настраивается с помощью типа НастройкиПоискаФайлов. Экземпляр НастройкиПоискаФайлов необходимо указать в параметре метода Файлы.Найти() в том случае, если настройки конкретного поиска отличаются от настроек по умолчанию. Тип НастройкиПоискаФайлов позволяет выполнить следующие настройки:
- Указать глубину поиска в структуре каталогов (относительно каталога, указанного в качестве первого параметра метода 
Найти(). Например, для поиска только в каталоге Windows (обычно расположенного по пути C:\Windows), без обхода вложенных каталогов, следует указать глубину поиска равной 1. Данный параметр задается с помощью методаМаксимальнаяГлубина(). - Включать или исключать каталоги из поиска. Данный параметр задается с помощью метода 
ИсключитьКаталоги(). - Включать или исключать обычные файлы из поиска. Данный параметр задается с помощью метода 
ИсключитьФайлы(). - Включать или исключать из поиска символические ссылки из поиска. Данный параметр задается с помощью метода 
ИсключитьСсылки(). - Задать фрагмент текста, который должен встречаться в именах файлов или каталогов. Текст будет применяться без учета регистра, вхождение заданного фрагмента будет проверяться в любой части файла. Не поддерживаются символы подстановки. Данный параметр задается с помощью метода 
ИмяСодержит(). - Выполнять поиск по регулярному выражению. Фильтр задается с помощью метода 
ИмяСоответствует(). В качестве параметра передается объект типаОбразец. При одновременной настройке поиска по регулярному выражению и подстроке используется последний заданный фильтр. - Определять интервал времени (как закрытый, так и открытый), в который попадает время создания файла или каталога. Под закрытым понимается указание той или иной границы, под открытым — неуказание границы. Данный параметр задается с помощью метода 
Создано(). Если граница указана, то дата и время указанной границы входят в проверяемый интервал. Если какая-либо граница не задана, это означает отсутствие ограничений с этой «стороны». - Определять интервал времени, когда файл или каталог был изменен. Работает аналогично интервалу создания. Данный параметр задается с помощью метода 
Изменено(). - Определять, файлы какого размера должны быть найдены. Интервал размера файлов задается диапазоном (открытым или закрытым). Значения границ попадают в проверяемый интервал. Данный параметр задается с помощью метода 
Размер(). 
Пример использования файловых методов
метод ПоискФайлов()
    пер НастройкиПоиска: НастройкиПоискаФайлов
    НастройкиПоиска = новый НастройкиПоискаФайлов()
        .ИмяСодержит(".")
        .МаксимальнаяГлубина(1)
        .ИсключитьФайлы(Истина)
        .ИсключитьКаталоги(Ложь)
    пер СписокФайлов = Файлы.Найти("c:\\program files\\1cv8\\", НастройкиПоиска)
    для Файл из СписокФайлов
        если Файл.ЭтоКаталог() 
            пер ИмяФайла = Файл.Имя
        ;
    ;
;
метод ПоискФайловПоРегулярномуВыражению(КорневойКаталог: Файл): Ч итаемыйМассив<Файл>
    пер РегулярноеВыражение = '.*\.jpe?g'
    пер ПоискПоРегулярномуВыражению = новый НастройкиПоискаФайлов().ИмяСоответствует(РегулярноеВыражение)
    пер НайденныеФайлы = Файлы.Найти(КорневойКаталог, ПоискПоРегулярномуВыражению)
    возврат НайденныеФайлы
;