Работа с файловой системой в 1С 8.3

Курс

Методы для работы с файловой системой

Платформа 1С позволяет выполнять различные действия с файловой системой как на клиентском компьютере, так и на серверном.

Все методы можно поделить на 3 группы:

  • Синхронные — используются на сервере. На клиенте можно использовать только если в свойствах конфигурации разрешено использование модальности.
  • Асинхронные через обратный вызов (описание оповещения) — используются только на клиенте.
  • Асинхронные через обещание — используются только на клиенте, доступны только начиная с версии платформы 8.3.18.

С файловой системой можно выполнить следующие действия:

  • Скопировать файл
  • Переместить файл
  • Удалить файл
  • Создать каталог
  • Выполнить поиск файлов
  • Разделить файл на части

Копирование файла

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

  • КопироватьФайл — синхронный.
  • НачатьКопированиеФайла — асинхронный через обратный вызов.
  • КопироватьФайлАсинх — асинхронный через обещание.

Все методы параметрами принимают путь к файлу источнику (что нужно скопировать) и путь к файлу приемнику (куда нужно скопировать). Метод НачатьКопированиеФайла дополнительно первым параметром принимает описание оповещения с именем процедуры, которая будет вызвана после копирования файла.

Если файл, который указан в качестве приемника уже существует, то он будет перезаписан.

Примеры:

В качестве пути к файлу можно использовать схемы http, https и ftp. Например, можно скопировать файл на яндекс-диск:

Перемещение файла

Для перемещения файла используются следующие методы:

  • ПереместитьФайл — синхронный.
  • НачатьПеремещениеФайла — асинхронный через обратный вызов.
  • ПереместитьФайлАсинх — асинхронный через обещание.

Все методы параметрами принимают путь к файлу источнику (что нужно переместить) и путь к файлу приемнику (куда нужно переместить). Метод НачатьПеремещениеФайла дополнительно первым параметром принимает описание оповещения с именем процедуры, которая будет вызвана после перемещения файла.

Если файл, который указан в качестве приемника уже существует, то он будет перезаписан.

Если у источника и приемника совпадает путь к файлу, а отличается только имя файла, то файл будет переименован.

Примеры:

В качестве пути к файлу можно использовать схемы http, https и ftp. Например, можно переименовать файл, который мы скопировали на яндекс-диск:

Удаление файла

Для удаления файла используются следующие методы:

  • УдалитьФайлы — синхронный.
  • НачатьУдалениеФайлов — асинхронный через обратный вызов.
  • УдалитьФайлыАсинх — асинхронный через обещание.

Все методы параметрами принимают путь к удаляемому файлу и маску, для удаления файлов. Метод НачатьУдалениеФайлов дополнительно первым параметром принимает описание оповещения с именем процедуры, которая будет вызвана после удаления файла.

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

Примеры удаления одного файла:

Примеры удаления каталога со всеми вложенными в него файлами и каталогами:

Примеры удаления только текстовых файлов в каталоге (удаление по маске):

Если в качестве маски передать строку «*.*», то будут удалены все файлы и каталоги.

В качестве пути к файлу можно использовать схемы http, https и ftp. Например, можно удалить файл на яндекс-диске:

Создание каталога

Для создания каталога используются следующие методы:

  • СоздатьКаталог — синхронный.
  • НачатьСозданиеКаталога — асинхронный через обратный вызов.
  • СоздатьКаталогАсинх — асинхронный через обещание.

Все методы параметром принимают путь к каталогу, который нужно создать. Метод НачатьСозданиеКаталога дополнительно первым параметром принимает описание оповещения с именем процедуры, которая будет вызвана после создания каталога.

Если такой каталог уже существует, то ничего не произойдет. Если какого-то из промежуточных каталогов не существует, то он тоже будет создан. Например, если при создании каталога F:\Каталог\ВложенныйКаталог на диске F нет каталога с именем Каталог, то сначала будет создан такой каталога, а потом в нем создан каталог ВложенныйКаталог.

Примеры создания каталога:

Поиск файлов и каталогов

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

  • НайтиФайлы — синхронный.
  • НачатьПоискФайлов — асинхронный через обратный вызов.
  • НайтиФайлыАсинх — асинхронный через обещание.

Все методы имеют 3 параметра:

  • Путь — если нужно найти один файл, то тут нужно указать полный путь к нему. В этом случае второй и третий параметры можно не указывать. Также тут можно указать путь к каталогу, в котором нужно выполнить поиск.
  • Маска — маска для поиска файлов. Если параметр указан, то первый параметр Путь рассматривается как путь к каталогу, в котором нужно выполнить поиск файлов и каталогов, удовлетворяющих маске.
  • ИскатьВПодкаталогах — если указать Истина, то поиск будет выполнен во вложенных каталогах. Если Ложь, то поиск выполняется только в каталоге из первого параметр Путь. По умолчанию равен Ложь.

Методы НайтиФайлы и НайтиФайлыАсинх возвращают массив объектов типа Файл с найденными файлами и каталогами.

У метода НачатьПоискФайлов первым параметром нужно передать описание оповещения с именем процедуры, которая будет вызвана после окончания поиска. Первый параметр в этой процедуре будет массив объектов типа Файл с найденными файлами и каталогами.

Пример поиска одного файла:

Пример поиска всех текстовых файлов в каталоге (поиск по маске):

Если нужно найти все файлы и каталоги в указанном каталоге, то в качестве маски нужно указать «*.*»:

Если нужно выполнить поиск не только в текущем каталоге, но и во всех вложенных, то третьим параметром нужно передать Истина:

Временный файл

Иногда возникает необходимость записать что-то во временный файл. Например, при выгрузке в клиент-серверной базе сначала записать данные во временный XML файл, потом передать его на клиента и записать в файл, который был выбран пользователем. В этом случае файл был использован только на время выполнения кода на встроенном языке.

Для получения уникального имени временного файла можно воспользоваться методом ПолучитьИмяВременногоФайла. Параметром нужно передать расширение, с которым нужно получить временный файл:

Если не указать расширение, то файл будет создан с расширением .tmp.

Стоит отметить, что при вызове метода возвращается только уникальное имя временного файла, сам файл не создается на диске. Он будет создан только при обращении к нему, например при записи.

Файл создается во временном каталоге файлов пользователя операционной системы. Например, для пользователя операционной системы Ivanov каталог с временными файлами выглядит так: C:\Users\Ivanov\AppData\Local\Temp

Имя временного файла может быть получено как на клиенте, так и на сервере. На сервере временный файл будет создаваться в каталоге пользователя, под которым запущена служба сервера 1С. Если сервер 1С запущен под системной учетной записью, то временные файлы создаются в каталоге C:\Windows\Temp

Платформа гарантирует, что имя временного файла будет уникальным. Примеры имен: v8_59E4_1.tmp, v8_D0CA_3.tmp.

При этом платформа не гарантирует, что временный файл будет автоматически удален, поэтому рекомендуется делать это самостоятельно методом УдалитьФайлы.

Стандартные каталоги

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

КаталогВременныхФайлов

Метод КаталогВременныхФайлов позволяет получить имя каталога временных файлов пользователя операционной системы. Данный метод доступен и на клиенте и на сервере (в клиент-серверной базе каталоги будут отличаться):

Например, для пользователя операционной системы Ivanov данный метод вернет C:\Users\Ivanov\AppData\Local\Temp\

Также у данного метода есть асинхронные аналоги, доступные только на клиенте:

  • НачатьПолучениеКаталогаВременныхФайлов
  • КаталогВременныхФайловАсинх

КаталогДокументов

Метод КаталогДокументов возвращает имя каталога операционной системы, который может использоваться для постоянного хранения данных. Данный метод доступен только на клиенте:

Например, для пользователя операционной системы Ivanov данный метод вернет C:\Users\Ivanov\AppData\Local\Temp\ (каталог Мои документы пользователя операционной системы).

Также у данного метода есть асинхронные аналоги:

  • НачатьПолучениеКаталогаДокументов
  • КаталогДокументовАсинх

РабочийКаталогДанныхПользователя

Метод РабочийКаталогДанныхПользователя возвращает имя каталога, который расположен внутри каталогов информационной базы 1С. Причем для каждого пользователя 1С будет свой каталог. Данный метод доступен только на клиенте:

Например, для пользователя 1С Иванов данный метод вернет .C:\Users\Ivanov\AppData\Roaming\1C\1cv8\3caa5b92-3d2c-4587-b534-8574178a52db\071523a4-516f-4fce-ba4b-0d11ab7a1893\App\, для пользователя 1С Петров — C:\Users\Ivanov\AppData\Roaming\1C\1cv8\3caa5b92-3d2c-4587-b534-8574178a52db\789da9ae-6ef1-4f6e-b4f4-ac5a423ab818\App\

То есть первый идентификатор в пути — это идентификатор базы 1С. А второй идентификатор — это идентификатор пользователя 1С.

Если в момент вызова данного метода такой каталог еще не существует, то он будет создан.

Также у данного метода есть асинхронные аналоги:

  • НачатьПолучениеРабочегоКаталогаДанныхПользователя
  • РабочийКаталогДанныхПользователяАсинх

КаталогПрограммы

Метод КаталогПрограммы возвращает имя каталога где хранятся исполняемые файлы платформы 1С. Данный метод доступен и на клиенте и на сервере:

В клиент-серверной базе метод может вернуть разные каталоги на клиенте и на сервере, даже если клиент и сервер находятся на одном компьютере, потому что может отличается разрядность клиента и сервера. Например, для клиента это будет C:\Program Files (x86)\1cv8\8.3.19.1264\bin\, а для сервера C:\Program Files\1cv8\8.3.19.1264\bin\

Разделитель пути

При динамическом формировании пути к файлу часто приходится использовать разделитель пути. Например, для операционной системы Windows это может выглядеть так:

Здесь был использован разделитель обратный слеш (\).

Так как платформа 1С является кроссплатформенной и может работать под управлением разных операционных систем, то разделитель пути может отличаться в зависимости от операционной системы.

В этом случае можно использовать метод ПолучитьРазделительПути, который вернет разделитель пути для текущей операционной системы:

Данный метод доступен и на клиенте и на сервере, и возвращает разделитель операционной системы компьютера или клиента или сервера, в зависимости от того, где его вызвали.

Также есть еще 2 аналогичных метода:

  • ПолучитьРазделительПутиКлиента — доступен и на клиенте и на сервере, но всегда возвращает разделитель пути для операционной системы компьютера клиента.
  • ПолучитьРазделительПутиСервера — доступен только на сервере, возвращает разделитель пути для операционной системы сервера.

Маска все файлы

При поиске всех файлов в каталоге методом НайтиФайлы мы использовали маску *.*. Но для разных операционных систем маска для всех файлов может отличаться. Поэтому лучше использовать метод ПолучитьМаскуВсеФайлы, который вернет маску все файлы для той операционной системы компьютера, на котором он был вызван:

Данный метод доступен и на клиенте и на сервере и позволяет получить маску все файлы как для клиента, так и для сервера.

Также есть еще 2 аналогичных метода:

  • ПолучитьМаскуВсеФайлыКлиента — доступен и на клиенте и на сервере, но всегда возвращает маску все файлы для операционной системы компьютера клиента.
  • ПолучитьМаскуВсеФайлыСервера— доступен только на сервере, возвращает маску все файлы для операционной системы сервера.

Разделение файла

Если файл слишком большой, то его можно разделить на несколько частей. Для этого используется метод РазделитьФайл. Первым параметром нужно передать путь к файлу, который нужно разделить. Вторым — максимальный размер одной части в байтах. Метод вернет массив путей к полученным частям файла:

Например, если на диске есть файл размером 286 байт:

РазделитьФайл

То после разделения он будет разбит на 3 части:

РазделитьФайл

Для объединения частей в один файл используется метод ОбъединитьФайлы. Первым параметром нужно передать массив с полными путями к частям файла, вторым полный путь к файлу, который будет получен в результате объединения:

Части будут объединены в том порядке, в каком они находятся в массиве.


Подписывайтесь на группу ВКонтакте , где я публикую ссылки на новые статьи с данного сайта, а также интересные материалы с других ресурсов по программированию в 1С
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Используя этот сайт, Вы даете согласие на использование cookies. На данном этапе Вы можете отказаться от использования cookies, настроив необходимые параметры в своем браузере.
ok