1с 7 получить путь к файлу
В 1С 8.3 (8.2) для работы с файлами существует два объекта: Файл и ДиалогВыбораФайла.
Рассмотрим каждый по отдельности.
Объект 1С — файл
Объект Файл служит для управления параметрами файлов.
Сразу стоит заметить, что данный объект не предназначен для чтения и записи из файлов.
Например, прочитаем параметры некоторого файла, находящегося на диске C:
В результате мы получим следующую информацию (если файл найден):
Параметры файла:
Полное имя файла: C:Работа с файламистатья.txt
Имя: статья.txt
Имя без расширения: статья
Расширение: .txt
Путь без имени: C:Работа с файлами
Размер: 899
Это файл: Да
Изменен: 18.05.2015 16:21:28
Только чтение: Нет
Невидимость: Нет
Запись в файл
Теперь, когда мы выбрали и открыли файл, можно с ним работать, т.е. прочитать его содержимое или записать в него что-нибудь.
Рассмотрим пример:
Получите 267 видеоуроков по 1С бесплатно:
Чтение файла в 1С
Часто бывает необходимо прочитать текст файла построчно, например, для анализа каждой строки. Для этого используем объект ЧтениеТекста.
Запись текста из 1С в файл
Заметим, что при записи текстового файла можно установить кодировку.
Копирование файла
Здесь все очень просто
Перемещение
Удаление
Диалог выбора файла
В указанных выше примерах есть одно неудобство. Путь к файлу прописан жестко в коде. Чтобы выбрать файл интерактивно, существует объект ДиалогВыбораФайла, о котором речь пойдет ниже.
Объект ДиалогВыбораФайла служит для открытия файла (файлов), сохранения файла или выбора каталога в диалоге специального вида.
Например, выберем и откроем некоторый файл с расширением txt:
Задаем режим диалога выбора. Доступны три варианта: ВыборКаталога, Открытие, Сохранение
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
Работа с файловой системой в языке 1С 8.3, 8.2 (в примерах)
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю). |
Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Нажмите одну из кнопок, чтобы поделиться:
Платформа 1С:Предприятие 8.3 предоставляет большой выбор инструментов для работы с файлами. В данной статье будут рассмотрены основные функции по работе с файлами.
Поиск файлов
Для поиска файлов во встроенном языке существует метод НайтиФайлы, метод доступен в Тонком клиенте, веб-клиенте, мобильном клиенте, через сервер, толстый клиент, а также внешнее соединение, мобильное приложение (клиент) и мобильное приложение (сервер).
Метод принимает на вход путь к каталогу, в котором будет производиться поиск, маска имени для поиска файлов, флаг – «Искать в подкаталогах»:
Функция возвращает массив, элементы которого объекты типа Файл.
В результате работы алгоритма будут выведены имена всех doc-файлов, содержащихся на диске C:. Если последний параметр указать «истина», будут найдены все файлы во всех подчиненных каталогах. Несколько дополнительных слов по маске поиска, в ОС Windows допускается использовать символы «*» – любые символы в любом количестве и «?» – любой один символ. Сочетать несколько масок недопустимо. В других ОС (Linux, macOS, iOS, Android) маску можно задавать более гибко, подробнее можно посмотреть в справке по языку.
Объект «Файл»
Объект Файл является основным объектом для работы с файлом. Конструктор объекта принимает полное имя файла.
- НачатьПолучениеВремениИзменения
- НачатьПолучениеКартинкиПредставленияФайлаБиблиотекиМобильногоУстройства
- НачатьПолучениеНевидимости
- НачатьПолучениеРазмера
- НачатьПолучениеТолькоЧтения
- НачатьПолучениеУниверсальногоВремениИзменения
- НачатьПроверкуСуществования
- НачатьПроверкуЭтоКаталог
- НачатьПроверкуЭтоФайл
- НачатьУстановкуВремениИзменения
- НачатьУстановкуНевидимости
- НачатьУстановкуТолькоЧтения
- НачатьУстановкуУниверсальногоВремениИзменения
- ПолучитьВремяИзменения
- ПолучитьКартинкуПредставленияФайлаБиблиотекиМобильногоУстройства
- ПолучитьНевидимость
- ПолучитьПредставлениеФайлаБиблиотекиМобильногоУстройства
- ПолучитьТолькоЧтение
- ПолучитьУниверсальноеВремяИзменения
- Размер
- Существует
- УстановитьВремяИзменения
- УстановитьНевидимость
- УстановитьТолькоЧтение
- УстановитьУниверсальноеВремяИзменения
- ЭтоКаталог
- ЭтоФайл
Некоторые методы по своей сути делают одно и то же действие, например, НачатьУстановкуТолькоЧтения и УстановитьТолькоЧтение. Методы, которые начинаются с «Начать*», предназначены для работы в асинхронном режиме, они доступны только на клиентах, а вот их «братья» доступны и на сервере. При работе на клиенте с файлами рекомендуется использовать асинхронные методы, однако методы без префикса «Начать» также доступны на клиенте. При использовании таких методов в веб-клиенте нужно будет подключать расширение по работе с файлами (как это сделать, будет рассмотрено ниже в статье).
Пример кода работы с объектом Файл:
Данный код устанавливает признак только чтения у всех файлов “*.doc” на диске C:.
Пример этого же алгоритма, но с использованием асинхронных методов:
Писать асинхронный код очень неудобно, он получается громоздкий, но именно асинхронный подход надо применять, а особенно – при разработке для web клиента.
Работа с файлами в клиент-серверной архитектуре
При работе в клиент-серверной архитектуре мы не можем работать с файлом на сервере, который был выбран на клиенте, т.к. сервер и клиент – это физически две разных машины. Чтобы решить эту проблему, мы должны передать файл из клиента на сервер, используя временное хранилище.
Пример синхронного кода:
Для передачи файлов существуют также такие асинхронные методы, как:
Вместо функции ПолучитьИзВременногоХранилища также можно использовать функцию ПолучитьФайл.
Работа с файлами в web-клиенте
Для работы с файлами в веб-клиенте необходимо расширение работы с файлами, делается это функциями:
В БСП (подсистема ПодключаемоеОборудование) уже есть метод, который использует указанные выше функции.
Если у вас используется web клиент, рекомендуется использовать следующую конструкцию:
В программных модулях системы «1С:Предприятие» версии 7.7 для работы с файлами и каталогами используются методы объекта типа " ФС " (сокр. от слов «файловая система»), причём по умолчанию в программе всегда доступен уже существующий (встроенный) объект с именем «ФС», к которому можно непосредственно применять данные методы.
Чтобы вызвать метод объекта типа " ФС " , имя метода пишется через точку после имени объекта, например:
При необходимости разработчик может также создать собственный объект типа " ФС " при помощи функции СоздатьОбъект() , например:
Методы объекта типа «ФС»
Прежде чем перейти к подробному рассмотрению конкретных методов объекта " ФС " , ещё раз хочу подчеркнуть, что методы данного объекта предназначены для работы именно с файловой системой. То есть они используются для выполнения таких операций, как поиск, удаление и копирование файлов, создание и удаление каталогов, выбор текущего каталога, просмотр реквизитов файлов и т.д. и т.п. Создание же и редактирование самих файлов выполняется с помощью методов объектов других типов. Так, например, для создания и редактирования текстовых файлов используются методы объектов типа " Текст " , для создания и редактирования файлов баз данных — методы объектов типа " XBase " , а для работы с файлами графики — методы объектов типа " Картинка " .
Примечание: При работе с файлами в системе «1С:Предприятие» версии 7.7, необходимо учитывать тот факт, что программа создавалась в те времена, когда имена файлов и каталогов могли содержать только символы латинского алфавита и цифры, а длина имени (без учёта расширения) не могла превышать восьми символов. По этой причине, во избежании недоразумений при работе с системой, не рекомендуется использовать файлы и каталоги с длинными именами, да ещё и содержащими буквы кириллицы.
Работа с дисками и каталогами
Проверить наличие свободного места на диске позволяет метод СвободноеМестоНаДиске() , возвращающий значение размера свободного дискового пространства в байтах. В качестве единственного параметра методу передаётся строковое выражение, содержащее имя проверяемого диска, например, "A:" , "C:" или другое. Англоязычный синоним имени метода — GetDiskFreeSpace() .
Пример использования метода:
Данный метод может быть полезен, например, при копировании файлов на съёмный носитель, который имеет сравнительно небольшой объём дискового пространства.
Получить имя текущего каталога позволяет метод ТекКаталог() . Данный метод не имеет параметров, а возвращает строковое значение — имя текущей директории (точнее, полный путь к ней, например, "D:\1S_Base\1SBDB" ). Англоязычный синоним имени метода — GetCurrentDirectory() .
Пример использования метода:
Кстати, для каждого конкретного пользователя текущим каталогом по умолчанию является его рабочий каталог, указанный в настройках Конфигуратора.
Если в Конфигураторе не указаны сведения о пользователях, то текущим каталогом для всех пользователей по умолчанию является корневой каталог базы данных.
Сделать текущим другой каталог позволяет метод УстТекКаталог() . Возвращаемого значения у метода нет. В качестве единственного параметра методу передаётся строковое выражение, содержащее полный путь к каталогу, устанавливаемому в качестве текущего. Англоязычный синоним имени метода — SetCurrentDirectory() .
Пример использования метода:
Данный метод может быть полезен, например, при написании обработок, выгружающих файлы обмена для системы Клиент-Банк, рабочий каталог которой может находиться на другом диске или даже на другом компьютере в сети.
Примечание: Каталог, который сделали текущим с помощью метода УстТекКаталог() , является таковым только для того контекста, из которого был вызван метод. То есть, если метод был вызван из модуля формы обработки, то каталог становится текущим только для данной формы обработки. Если же метод был вызван из глобального модуля программы, то каталог становится текущим для всех нижестоящих модулей.
Возможность интерактивного выбора каталога предоставляет метод ВыбратьКаталог() . При вызове данного метода, на экран выводится стандартное окно выбора директории (см. рис. ниже), после чего в программу возвращаются значения, определяемые действиями пользователя. Англоязычный синоним имени метода — SelectDirectory() .
- < Каталог >— имя переменной, в которую перед вызовом метода можно передать имя начальной директории — той, которая будет предложена пользователю в окне диалога (см. пример и рисунок ниже). Если в переменную передать пустую строку или вообще ничего не передать, то в качестве начальной директории будет использован каталог пользователя. В эту же переменную, в случае нажатия кнопки «ОК», система возвратит имя выбранного пользователем каталога;
- < Заголовок >— строковый литерал или cтроковое выражение, с помощью которого можно задать заголовок открываемого окна;
- < Таймаут >— числовое выражение, значение которого задаёт время ожидания системы (в секундах) на отклик пользователя. По истечении этого времени окно закрывается. Если же таймаут не задан (параметр вообще-то является необязательным) или задан 0, то окно будет ждать действий пользователя бесконечно.
Возвращаемое методом значение, в зависимости от действий пользователя, может быть следующим:
- 1 — в окне диалога нажата кнопка «ОК», при этом в переменную < ИмяКаталога >возвращается имя выбранного каталога;
- 0 — в окне диалога нажата кнопка «Отмена» или кнопка закрытия окна, либо клавиша Esc на клавиатуре;
- −1 — истекло время ожидания отклика пользователя, указанное в параметре < Таймаут >.
Пример использования метода:
В результате работы вышеприведённого кода на экран будет выведено стандартное диалоговое окно для выбора каталога.
Содать новый каталог на диске позволяет метод СоздатьКаталог() . Возвращаемое значение у метода отсутствует. В качестве единственного параметра методу передаётся строковое выражение, содержащее имя создаваемого каталога и полный путь к нему. Англоязычный синоним имени метода — CreateDirectory() .
Пример использования метода:
Примечание: Полный путь к создаваемому каталогу можно не указывать, если он создаётся в текущем каталоге.
Удалить каталог с диска позволяет метод УдалитьКаталог() . В качестве единственного параметра методу передаётся строковое выражение, содержащее имя удаляемого каталога и полный путь к нему. Англоязычный синоним имени метода — RemoveDirectory() .
Пример использования метода:
Примечание: Полный путь к создаваемому каталогу можно не указывать, если он создаётся в текущем каталоге.
Получить имя основного каталога операционной системы Windows позволяет метод WindowsКаталог() . Он не имеет параметров. Англоязычный синоним имени метода — GetWindowsDirectory() .
Примечание: Для получения информации о некоторых каталогах можно также использовать глобальные (встроенные) функции, такие как:
- ИмяКомпьютера() — возвращает строковое значение, содержащее сетевое имя компьютера, работающего в данный момент с программой, например, "buch1" ;
- КаталогПрограммы() — возвращает строковое значение, содержащее полный путь к папке исполнимыми файлами программы, например, "C:\Program Files\1Cv77\BIN\" ;
- КаталогИБ() — возвращает строковое значение, содержащее полный путь к папке информационной базы (базы данных), например, "C:\Program Files\1Cv77\1SBDB\" ;
- КаталогПользователя() — возвращает строковое значение, содержащее полный путь к рабочему каталогу пользователя, например, "C:\Program Files\1Cv77\1SBDB\usr1\" ;
- КаталогВременныхФайлов() — возвращает строковое значение, содержащее имя каталога временных файлов, например, "C:\WINDOWS\Temp\" .
Для выполнения таких действий, как проверка наличия каталога на указанном диске, переименование или перемещение каталога, получение атрибутов каталога, используются те же методы объекта " ФС " , что и при работе с файлами (см. ниже).
Работа с файлами
Проверить наличие файла или каталога позволяет метод СуществуетФайл() . В качестве единственного параметра методу передаётся строковое выражение, содержащее имя искомого файла или каталога (например, "D:\SSTDB\update.txt" или "D:\1S_Base\SSTDB"). ). Англоязычный синоним имени метода — ExistFile() .
Пример использования метода:
В параметре метода можно указать либо полный путь к файлу/каталогу, либо только имя искомого файла/каталога, если проверка будет производиться в текущей директории:
Получить атрибуты указанного файла или каталога позволяет метод АтрибутыФайла() . Англоязычный синоним имени метода — GetFileAttr() .
- < Файл >— строковое выражение, содержащее имя файла или каталога, атрибуты которого требуется получить. В параметре следует указать либо полный путь к файлу/каталогу, либо только имя файла/каталога, если проверка файла будет производиться в текущей директории;
- < Размер >— имя переменной, в которую система возвратит числовое значение размера файла в байтах;
- < Атрибуты >— имя переменной, в которую система возвратит строковое значение длиной 9 символов, в котором будут закодированы атрибуты файла. Символы могут принимать значения «0» или «1». Если первый символ «1», то файл доступен только для чтения; если второй символ «1», то это скрытый файл; если третий символ «1», то это системный файл; если четвертый символ «1», то это каталог; если пятый символ «1», то это архивный файл; если шестой символ «1», то это обычный файл (все другие атрибуты не установлены); если седьмой символ «1», то это временный файл; если восьмой символ «1», то это файл, сжатый каким-либо архиватором; если девятый символ «1», то к файлу нет доступа;
- < ВремяСоздания >— имя переменной, в которую система возвратит строковое значение, содержащее дату и время создания файла;
- < ВремяПоследнДоступа >— имя переменной, в которую система возвратит строковое значение, содержащее дату и время последнего доступа к файлу;
- < ВремяПоследнЗаписи >— имя переменной, в которую система возвратит строковое значение, содержащее дату и время последней записи файла;
- < РасширенноеИмя >— имя переменной, в которую система возвратит строковое значение, содержащее полное имя файла.
Пример использования метода:
Переместить или переименовать указанный файл или каталог позволяет метод ПереименоватьФайл() . Англоязычный синоним имени метода — MoveFile() .
- < ФайлИсточник >— строковое выражение, содержащее имя файла или каталога, который необходимо переименовать или переместить. В параметре следует указать либо полный путь к файлу/каталогу, либо только имя файла/каталога, если операция будет выполняться с файлом или каталогом из текущей директории;
- < ФайлПриемник >— строковое выражение, содержащее имя файла или каталога, который должен появиться в результате переименования или перемещения. В параметре следует указать полный путь к файлу/каталогу, либо только имя файла/каталога, если переименовывается файл/каталог из текущей директории, либо файл/каталог перемещается в текущую директорию;
- < ФлагПерезаписи >— числовое выражение, определяющее режим переименования (перемещения) в случае наличия в каталоге-приёмнике одноимённого файла. Если значение параметра равно 0, то существующий в каталоге-приёмнике одноимённый файл не заменяется на копируемый (не перезаписывается) и перемещения не происходит; если же значение параметра равно 1, то выполняется перемещение и перезапись (только для файлов. ).
Пример использования метода:
Выполнить копирование файла позволяет метод КопироватьФайл() . Англоязычный синоним имени метода — FileCopy() .
- < ФайлИсточник >— строковое выражение, содержащее имя файла, который необходимо копировать. В параметре следует указать либо полный путь к файлу, либо только имя файла, если он находится в текущей директории;
- < ФайлПриемник >— строковое выражение, содержащее имя будущей копии файла. В параметре следует указать либо полный путь к файлу, либо только имя файла, если он будет находиться в текущей директории;
- < ФлагОтменыПерезаписи >— числовое выражение, определяющее режим копирования в случае наличия в каталоге-приёмнике одноимённого файла. Если результатом этого выражения является 0, то существующий в каталоге-приёмнике одноимённый файл заменяется на копируемый (перезаписывается); если же результатом выражения является 1, то копирование не выполняется.
Пример использования метода:
Удалить указанный файл позволяет метод УдалитьФайл() . В качестве единственного параметра методу передаётся строковое выражение, содержащее имя удаляемого файла, например, "D:\SSTDB\CP\input.tmp" . Полный путь к удаляемому файлу можно не указывать, если он удаляется в текущем каталоге. Англоязычный синоним имени метода — DeleteFile() .
Пример использования метода:
Выбор файла пользователем (кроме файлов картинки) позволяет реализовать метод ВыбратьФайл() . Англоязычный синоним имени метода — SelectFile() .
- < ТипДиалога >— числовое выражение, значение которого определяет тип открываемого диалога. Допустимые значения: 0 — диалог типа «Открыть», 1 — диалог типа «Сохранить»;
- < Файл >— имя переменной, в которую при вызове метода можно передать строковое значение с именем сохраняемого файла. В эту же переменную система возвращает имя выбранного файла;
- < Каталог >— имя переменной, в которую при вызове метода можно передать строковое значение с именем начального (рекомендуемого) каталога. Если начальный каталог не указать, система использует текущий. В эту же переменную система возвратит имя выбранного пользователем каталога;
- < 3аголовок >— строковое выражение, содержащее текст заголовка для открываемого окна;
- < Фильтр >— строковое выражение, задающее список фильтров отбора файлов. Фильтр состоит из двух частей, разделенных символом «|» (вертикальная черта): строки представления, которая отображается в окне выбора файла, и непосредственно строки маски. В строке маски можно использовать символ « * » (звёздочка), что означает наличие любого числа произвольных символов. Символ «?» (вопросительный знак) в строке маски означает наличие одного произвольного символа. Одновременно можно задавать несколько фильтров в виде списка, в качестве разделителей используется символ «|» (вертикальная черта). Например, список из двух фильтров: "Текст(*.txt)|*.txt| Таблицы(*.mxl)|*.mxl" ;
- < Расширение >— строковое выражение, содержащее расширение имени файла по умолчанию (оно будет использовано системой при записи файла);
- < Таймаут >— числовое выражение, значение которого задаёт время ожидания системы (в секундах) на отклик пользователя. По истечении этого времени окно закрывается. Если же таймаут не задан (параметр вообще-то является необязательным) или задан 0, то окно будет ждать действий пользователя бесконечно.
Возвращаемое методом значение, в зависимости от действий пользователя, может быть следующим:
- 1 — в окне диалога нажата кнопка «ОК», при этом в в переменную < ИмяФайла >возвращается выбранное имя файла, а в переменную < НачКаталог >возвращается имя выбранного каталога;
- 0 — в окне диалога нажата кнопка «Отмена» или кнопка закрытия окна, либо клавиша Esc на клавиатуре;
- −1 — истекло время ожидания отклика пользователя, указанное в параметре < Таймаут >.
Пример использования метода:
В результате работы вышеприведённого кода на экран будет выведено стандартное диалоговое окно для выбора файла.
Выбор файла картинки пользователем позволяет реализовать метод ВыбратьФайлКартинки() . Англоязычный синоним имени метода — SelectPictFile() .
- < ТипДиалога >— числовое выражение, значение которого определяет тип открываемого диалога. Допустимые значения: 0 — диалог типа «Открыть», 1 — диалог типа «Сохранить»;
- < Файл >— имя переменной, в которую при вызове метода можно передать строковое значение с именем сохраняемого файла. В эту же переменную система возвращает имя выбранного файла;
- < Каталог >— имя переменной, в которую при вызове метода можно передать строковое значение с именем начального (рекомендуемого) каталога. Если начальный каталог не указать, система использует текущий. В эту же переменную система возвратит имя выбранного пользователем каталога;
- < 3аголовок >— строковое выражение, содержащее текст заголовка для открываемого окна;
- < Расширение >— строковое выражение, содержащее расширение имени файла по умолчанию (оно будет использовано системой при записи файла);
- < Таймаут >— числовое выражение, значение которого задаёт время ожидания системы (в секундах) на отклик пользователя. По истечении этого времени окно закрывается. Если же таймаут не задан (параметр вообще-то является необязательным) или задан 0, то окно будет ждать действий пользователя бесконечно.
Возвращаемое методом значение, в зависимости от действий пользователя, может быть следующим:
- 1 — в окне диалога нажата кнопка «ОК», при этом в в переменную < ИмяФайла >возвращается выбранное имя файла, а в переменную < НачКаталог >возвращается имя выбранного каталога;
- 0 — в окне диалога нажата кнопка «Отмена» или кнопка закрытия окна, либо клавиша Esc на клавиатуре;
- −1 — истекло время ожидания отклика пользователя, указанное в параметре < Таймаут >.
Пример использования метода:
В результате работы вышеприведённого кода на экран будет выведено стандартное диалоговое окно для выбора файла картинки.
Работа с выборкой файлов
Начать выборку файлов по заданной маске и найти первый файл позволяет метод НайтиПервыйФайл() . В качестве единственного параметра методу передаётся строковое выражение, содержащее маску имён файлов. В строке маски можно использовать символ « * » (звёздочка), что означает наличие любого числа произвольных символов, и символ «?» (вопросительный знак), что означает наличие одного произвольного символа. Возвращаемое методом значение является строкой с именем найденного файла. Англоязычный синоним имени метода — FindFirstFile() .
Пример использования метода:
Примечание: Методы НайтиПервыйФайл() и НайтиСледующийФайл() возвращают имена файлов в той же последовательности, как это делает команда dir операционной системы MS DOS (см. рис. ниже). То есть, если задана маска « *.* » для некорневого каталога, первым возвращаемым значением будет строка "." , обозначающая ссылку на текущий каталог. Вторым возвращаемым значением будет строка ".." , обозначающая ссылку на каталог уровнем выше. А уже при получении последующих файлов, возвращаемыми значениями будут имена найденных файлов.
Найти следующий файл в открытой выборке файлов позволяет метод НайтиСледующийФайл() . Параметры у метода отсутствуют. Возвращаемым значением метода будет строка с именем найденного файла. Англоязычный синоним имени метода — FindNextFile() .
Объект FileSystemObject (FSO)
Примеры использования объекта FileSystemObject (FSO) в 1С
Объектная модель FSO позволяет работать с файлами и папками: создавать, изменять, перемещать и удалять. Получать доступ к системным папкам: наличие, расположение. Можно получать информацию о дисках, папках и файлах: их имена, атрибуты, даты создания или изменения и т.д. Кроме того, создание и манипулирование текстовыми файлами (не двоичными!).
FSO имеет следующие объекты:
Объекты FSO
Объект | Описание |
---|---|
Drive | Позволяет получить информацию о дисководах, присоединенных к системе: их тип, объем (общий, занятый и свободный), метку, серийный номер и т.д. Под словом "дисковод" не обязательно подразумевается жесткий диск. Это может быть FDD, CD-ROM, виртуальный диск и т.д. Также не обязательно, чтобы дисководы были физически присоединены к системе - обеспечивается работа с сетевыми дисками. |
Folder (Папка) | Позволяет создавать, удалять или перемещать папки. Также через этот объект можно получить сведения об их именах, атрибутах, путях к определенным папкам и так далее. |
Files (Файлы) | Позволяет создавать, удалять или перемещать файлы. Предоставляет доступ к атрибутам, именам и прочим характеристикам файлов. |
FileSystemObject | Основной объект группы. Содержит методами, которые позволяют создавать, удалять, получать информацию обо всех объектах файловой системы. Также осуществляет управление дисководами, папками и файлами. Многие из методов, связанных с этим объектом, дублированы в других объектах. |
TextStream | Дает возможность читать и писать текстовые файлы. |
Drive
Объект Drive обеспечивает доступ к свойствам логических дисков, дисководов и сетевых дисков. Данный объект возвращается методом GetDrive():
Получить все диски можно следующим образом:
Из полученного таким образом массива можно получить инфомацию о всех дисках в системе:
Свойства объекта Drive
Свойство | Описание |
---|---|
AvailableSpace | Возвращает количество места, доступного пользователю на указанном диске или сетевом ресурсе. |
DriveLetter | Возвращает букву указанного диска. |
DriveType | Возвращает число, обозначающее тип диска. Возможные значения: 0 = Unknown 1 = Removable 2 = Fixed 3 = Network 4 = CD-ROM 5 = RAM Disk |
FileSystem | Возвращает строку с типом файловой системы указанного диска. |
FreeSpace | Возвращает количество места, доступного пользователю на указанном диске или сетевом ресурсе. Свойство аналогично AvailableSpace. Разница возможна при использовании на одном диске разных файловых систем (В оригинале документации фраза звучала так: Differences may occur between the two for computer systems that support quotas). |
IsReady | Проверяет готовность устройства к работе. Имеет смысл только для съемных дисков или CD-ROM. Возвращает: 0 - устройство не готово -1 - устройство готово |
Path | Возвращает путь до указанного диска, т.е. имя указанного диска с двоеточием. |
RootFolder | Возвращает объект типа Folder со значением равным корневой папке указанного диска. |
Folder (Папка)
Объект Folder обеспечивает доступ ко всем свойствам папки. Данный объект возвращается методом GetFolder():
Свойства Folder
Свойство | Описание |
---|---|
Attributes | Читает/устанавливает значение атрибутов. Расшифровка значений: 0 Атрибуты не установлены 1 Read-only file. 2 Hidden file. 4 System file. 8 Метка тома. Только для чтения. 16 Папка. Только для чтения. 32 Архивный файл. 64 Ссылка или ярык. 128 Сжатый файл. Только для чтения. При сочетании атрибутов их значения суммируются. |
DateCreated | Возвращает дату и время создания папки. Только чтение. В случае с 1С возвращается только дата. |
DateLastAccessed | Возвращает дату и время последнего доступа к папке. Только чтение. В случае с 1С возвращает только дату. |
DateLastModified | Возвращает дату и время последнего изменения папки. Только чтение. В случае 1С возвращает только дату. |
Drive | Возвращет объект типа Drive, содержащий диск, на котором находится указанная папка. |
Files | Возвращает коллекцию объектов типа File, находящихся в папке. |
IsRootFolder | Возвращает признак корневой папки. Значение: -1 - папка корневая; 0 - иначе. |
Name | Возвращает/устанавливает новое имя файла. Имя файла возвращается с расширением. |
ParentFolder | Возвращает объект типа Folder, содержащий родительскую папку указанного файла. |
Path | Возвращает полный путь до указанного файла. |
ShortName | Возвращает короткое имя файла. |
ShortPath | Возвращает короткий путь до файла. |
Size | Возвращает размер указанного файла. |
SubFolders | Возвращает коллекцию состоящую из объектов типа Folder, содержащую папки, находящиеся внутри данной папки. |
Type | Возвращает расшифровку типа папки в виде строки. Расшифровка берется из ассоциаций Windows. |
Методы Folder
Метод | Описание |
---|---|
Copy( , ) | Копирует указанную папку в каталог. Параметры: - путь-приемник (куда копируем). - флаг перезаписи в случае, если такая папка там уже существует. -1 - перезаписывать, 0 - не перезаписывать. Не обязателен. По умолчанию -1. |
Delete( ) | Удаление папки. Параметры: - флаг удаления папки с атрибутом только чтение. -1 - удалять; 0 - не удалять. Не обязателен. По умолчанию равен 0. |
Move( ) | Перемещение папки в другую родительскую папку. Параметры: - каталог, куда переносим папку. |
Files (Файлы)
Объект File обеспечивает доступ ко всем свойствам файла. Данный объект возвращается методом GetFile():
Свойства Files
Свойство | Описание |
---|---|
Attributes | Читает/устанавливает значение атрибутов. Расшифровка значений: 0 Атрибуты не установлены 1 Read-only file. 2 Hidden file. 4 System file. 8 Метка тома. Только для чтения. 16 Папка. Только для чтения. 32 Архивный файл. 64 Ссылка или ярык. 128 Сжатый файл. Только для чтения. При сочетании атрибутов их значения суммируются. |
DateCreated | Возвращает дату и время создания файла. Только чтение. В случае с 1С возвращается только дата. |
DateLastAccessed | Возвращает дату и время последнего доступа к файлу. Только чтение. В случае с 1С возвращает только дату. |
DateLastModified | Возвращает дату и время последнего изменения файла. Только чтение. В случае 1С возвращает только дату. |
Drive | Возвращет объект типа Drive, содержащий диск, на котором находится указанный файл. |
Name | Возвращает/устанавливает новое имя файла. Имя файла возвращается с расширением. |
ParentFolder | Возвращает объект типа Folder, содержащий родительскую папку указанного файла. |
Path | Возвращает полный путь до указанного файла. |
ShortName | Возвращает "короткое" имя файла. |
ShortPath | Возвращает короткий путь до файла. |
Size | Возвращает размер указанного файла. |
Type | Возвращает расшифровку типа файла в виде строки. Расшифровка берется из ассоциаций Windows. |
Методы Files
Метод | Описание |
---|---|
Copy( , ) | Копирует указанный файл в каталог. Параметры: - путь-приемник файла (куда копируем). Можно указывать как просто папку куда копируем, так и папку + новое имя файла. - флаг перезаписи в случае, если такой файл там уже существует. -1 - перезаписывать, 0 - не перезаписывать. Не обязателен. По умолчанию -1. В случае установки флага в 0 и существования файла на месте копирования, будет выдана ошибка. |
Delete( ) | Удаление файла. Параметры: - флаг удаления файла с атрибутом только чтение. -1 - удалять; 0 - не удалять. Не обязателен. По умолчанию равен 0. |
Move( ) | Перемещение файла в другую папку, переименование файла. Параметры: - каталог/имя, куда переносим файл. |
OpenAsTextStream( , ) | Открывает указанный файл как текст. Возвращает объект типа TextStream. Параметры: - режим открытия файла. Значения: 1- только для чтения; 2 - для записи, если файл существует, то его содержимое будет очищено; 8 - для добавления строк в файл. Не обязателен. - формат текста в файле. Значения: -2 - по умолчанию для ОС; -1 - открывает в формате Unicode; 1 - открывает в формете ASCII. Не обязателен. |
FileSystemObject
Содержит методами, которые позволяют создавать, удалять, получать информацию обо всех объектах файловой системы. Также осуществляет управление дисководами, папками и файлами. Данный объект создается при помощи команды
Свойства FileSystemObject
Свойство | Описание |
---|---|
Drives | Возвращает коллекцию состоящую из объектов типа Drive, содержащую все диски на данном компьютере. Примеры работы с этими объектами были описаны выше. |
Методы FileSystemObject
Метод | Описание |
---|---|
BuildPath( , ) | Возвращает строку с полным путем до файла из указанного пути и имени файла. Метод необходим для корректного ''прибавления'' имени файла к пути. Параметры: - путь до файла. - имя файла. |
CopyFile( , , ) | Копирует файл(ы) из источника в приемник. Параметры: - строка с указанием файла(ов) источника. Можно указывать шаблоны в формате DOS. - папка-приемник куда копируем. - флаг перезаписи файлов в приемнике, если они там уже существуют. -1 - перезаписывать; 0 - не перезаписывать. Не обязателен. По умолчанию -1. |
CopyFolder( , , ) | Копирует папку(и) из источника в приемник. Параметры: - строка с указанием папки источника. Можно указывать шаблоны в формате DOS. - папка-приемник куда копируем. - флаг перезаписи файлов в приемнике, если они там уже существуют. -1 - перезаписывать; 0 - не перезаписывать. Не обязателен. По умолчанию -1. |
CreateFolder( ) | Создает новую папку. Параметры: - имя новой папки |
CreateTextFile( , , ) | Создает новый текстовый файл. Возвращает объект типа TextStream. Параметры: - строка с именем файла. - флаг перезаписи создаваемого файла. Значения: -1 - перезаписывать; 0 - не перезаписывать. Если файл существует и признак установлен в 0, то будет выдана ошибка. Не обязателен. По умолчанию 0. - флаг формата создаваемого файла. Значения: -1 - Unicode; 0 - ASCII. Не обязателен. По умолчанию 0. |
DeleteFile( , ) | Удаляет файл(ы). Параметры: - строка с именем удаляемого файла(ов). Могут использоваться шаблоны в формате DOS. - флаг удаления файлов с признаком только чтение. Значения: -1 - удалять; 0 - не удалять. Не обязателен. Значение по умолчанию 0. В случае, если файл не найден, возникает ошибка. При этом, откат предыдущих операций (удалений) не происходит. |
DeleteFolder( , ) | Удаляет папку(и). Параметры: - строка с именем удаляемой папки. Можно использовать шаблоны DOS. - флаг удаления папок с признаком только чтение. Значения: -1 - удалять; 0 - не удалять. Не обязателен. Значение по умолчанию 0. |
DriveExists( ) | Проверяет наличие диска в системе. Возвращает -1, если указаный диск существует, иначе 0. Параметры: - строка с буквой диска или с полным путем. |
FileExists( ) | Проверяет существование файла. Возвращает -1, если указанный файл существует, иначе 0. Параметры: - строка с именем файла. |
FolderExists( ) | Проверяет существование папки. Возвращает -1, если указанная папка существует, иначе 0. Параметры: - строка, содержащая имя папки. |
GetAbsolutePathName( ) | Возвращает полный путь до указанной строки, относительно текущего каталога. Параметры: - строка, содержащая путь, который надо рассчитать. |
GetBaseName( ) | Возвращает имя файла из указанного пути без расширения или последнюю секцию пути (только для локальных путей). Параметры: - строка, содержащая путь, из которого надо извлечь имя. Если указать имя диска, то будет возвращена пустая строка. |
GetDrive( ) | Возвращает объект типа Drive для указанного диска. Параметры: - строка, содержащая имя диска. Может быть: буквой диска, буквой диска с двоеточием, буквой диска с двоеточием и наклонной чертой, путем до сетевого ресурса. |
GetDriveName( ) | Возвращает строку с именем диска и двоеточием. Параметры: - строка пути, из которой надо найти диск. |
GetExtensionName( ) | Возвращает расширение для указанного файла. Параметры: - строка, содержащая путь до файла. |
GetFile( ) | Возвращает объект типа File. Параметры: - строка, содержащая путь до указанного файла. |
GetFileName( ) | Возвращает имя файла с его расширением или последнюю секцию из указанного пути (только для локальных путей). Параметры: - строка, содержащая путь до файла. |
GetFolder( ) | Возвращает объект типа Folder для указанного каталога. Параметры: - строка, содержащая путь до каталога. |
GetParentFolderName( ) | Возвращает полный путь до родительской папки. Параметры: - строка, содержащая путь до файла или до папки. |
GetSpecialFolder( ) | Возвращает путь до системных папок. Параметры: - номер вида возвращаемой папки. Возможные значения: 0 - каталог Windows; 1 - системыный каталог Windows; 2 - каталог временных файлов. |
GetTempName() | Возвращает уникальное имя для временного файла. Примечание: Для создания пути временного файла во временном каталоге можно использовать следующую конструкцию: |
MoveFile( , ) | Перемещает файл(ы). Если в папке приемнике уже существует перемещаемый файл или есть папка с таким же именем, то происходит ошибка. Параметры: - строка, содержащая путь до перемещаемыъ файлов. Возможно указание шаблонов в формате DOS. - строка, содержащая путь до папки приемника. |
MoveFolder( , ) | Перемещает указанный каталог(и). Если в папке приемнике уже сущестует файл или каталог с таким именем, тогда возникает ошибка. Параметры: - строка, содержащая путь до перемещаемыъ файлов. Возможно указание шаблонов в формате DOS. - строка, содержащая путь до папки приемника. |
OpenTextFile( , , , ) | Открывает указанный текстовый файл. Возвращает объект типа TextStream. Параметры: - строка, содержащая имя файла. - режим открытия файла. Значения: 1- только для чтения; 2 - для записи, если файл существует, то его содержимое будет очищено; 8 - для добавления строк в файл. Не обязателен. По умолчанию 1. - флаг создания файла, если он не существует. -1 - создавать файл; 0 - не создавать файл. Не обязателен. По умолчанию 0. - формат текста в файле. Значения: -2 - по умолчанию для ОС; -1 - открывает в формате Unicode; 1 - открывает в формете ASCII. Не обязателен. По умолчанию 1. |
TextStream
Объект TextStream обеспечивает доступ к текстовым файлам и содержимому текстовых потоков. Данный объект возвращается методами
OpenTextFile() [объект FileSystemObject];
CreateTextFile() [объект FileSystemObject];
OpenAsTextStream() [объект File].
Свойствами:
StdOut,StdIn,StdErr [объект WshScriptExec]
Объект языка 1С «Файл» позволяет:
- файл 1С — получить путь к файлу (каталог без имени файла), имя без расширения, только расширение
- файл 1С — проверить наличие файла
- файл 1С — определить файл это или каталог
- файл 1С — получить размер файла
- файл 1С — работать с атрибутами файла (время измененеия, только чтение, скрытые файлы).
Пример файл 1С — проверка наличия каталога на диске:
Функция ПолучитьКаталогПоИмениФайла(ИмяФайла)
//обращаемся к файлу, на этот момент существование файла не проверяется
Файл = Новый Файл(ИмяФайла);
//напрямую проверяем существование
Если не Файл.Существует() Тогда
Сообщить("Ошибка. Файл с именем '" + ИмяФайла + "' не существует");
Возврат ИмяФайла;
КонецЕсли;
//проверка на каталог
Если Файл.ЭтоКаталог() Тогда
//если последняя буква не "\", то добавляем ее
Возврат ?(Прав(СокрП(ИмяФайла), 1) = "\", ИмяФайла, СокрП(ИмяФайла) + "\");
КонецЕсли;
//возвращаем путь (т.е. только каталог из имени файла)
Возврат Файл.Путь;
Пример файл 1С — проверка существования файла на диске:
Функция ФайлМожноЗаписывать(ИмяФайла)
//обращаемся к файлу, на этот момент существование файла не проверяется
Файл = Новый Файл(ИмяФайла);
//напрямую проверяем существование
Если не Файл.Существует() Тогда
Сообщить("Ошибка. Файл с именем '" + ИмяФайла + "' не существует");
Возврат ИмяФайла;
КонецЕсли;
//вернет ИСТИНА, если нельзя записывать (т.е. только чтение "установлен")
Если Файл.ПолучитьТолькоЧтение() Тогда
Попытка
Файл.УстановитьТолькоЧтение(Ложь);
Исключение
//здесь мы окажемся, если у пользователя, под которым работает клиент 1С нет прав снять этот реквизит
Возврат Ложь;
КонецПопытки;
КонецЕсли;
Пример файл 1С — получение размера файла в байтах, килобайтах, мегабайтах:
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
Работа с файловой системой в языке 1С 8.3, 8.2 (в примерах)
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю). |
Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Нажмите одну из кнопок, чтобы поделиться:
В 1С 8.3 (8.2) для работы с файлами существует два объекта: Файл и ДиалогВыбораФайла.
Рассмотрим каждый по отдельности.
Объект 1С — файл
Объект Файл служит для управления параметрами файлов.
Сразу стоит заметить, что данный объект не предназначен для чтения и записи из файлов.
Например, прочитаем параметры некоторого файла, находящегося на диске C:
В результате мы получим следующую информацию (если файл найден):
Параметры файла:
Полное имя файла: C:Работа с файламистатья.txt
Имя: статья.txt
Имя без расширения: статья
Расширение: .txt
Путь без имени: C:Работа с файлами
Размер: 899
Это файл: Да
Изменен: 18.05.2015 16:21:28
Только чтение: Нет
Невидимость: Нет
Запись в файл
Теперь, когда мы выбрали и открыли файл, можно с ним работать, т.е. прочитать его содержимое или записать в него что-нибудь.
Рассмотрим пример:
Получите 267 видеоуроков по 1С бесплатно:
Чтение файла в 1С
Часто бывает необходимо прочитать текст файла построчно, например, для анализа каждой строки. Для этого используем объект ЧтениеТекста.
Запись текста из 1С в файл
Заметим, что при записи текстового файла можно установить кодировку.
Копирование файла
Здесь все очень просто
Перемещение
Удаление
Диалог выбора файла
В указанных выше примерах есть одно неудобство. Путь к файлу прописан жестко в коде. Чтобы выбрать файл интерактивно, существует объект ДиалогВыбораФайла, о котором речь пойдет ниже.
Объект ДиалогВыбораФайла служит для открытия файла (файлов), сохранения файла или выбора каталога в диалоге специального вида.
Например, выберем и откроем некоторый файл с расширением txt:
Задаем режим диалога выбора. Доступны три варианта: ВыборКаталога, Открытие, Сохранение
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
Платформа 1С:Предприятие 8.3 предоставляет большой выбор инструментов для работы с файлами. В данной статье будут рассмотрены основные функции по работе с файлами.
Поиск файлов
Для поиска файлов во встроенном языке существует метод НайтиФайлы, метод доступен в Тонком клиенте, веб-клиенте, мобильном клиенте, через сервер, толстый клиент, а также внешнее соединение, мобильное приложение (клиент) и мобильное приложение (сервер).
Метод принимает на вход путь к каталогу, в котором будет производиться поиск, маска имени для поиска файлов, флаг – «Искать в подкаталогах»:
Функция возвращает массив, элементы которого объекты типа Файл.
В результате работы алгоритма будут выведены имена всех doc-файлов, содержащихся на диске C:. Если последний параметр указать «истина», будут найдены все файлы во всех подчиненных каталогах. Несколько дополнительных слов по маске поиска, в ОС Windows допускается использовать символы «*» – любые символы в любом количестве и «?» – любой один символ. Сочетать несколько масок недопустимо. В других ОС (Linux, macOS, iOS, Android) маску можно задавать более гибко, подробнее можно посмотреть в справке по языку.
Объект «Файл»
Объект Файл является основным объектом для работы с файлом. Конструктор объекта принимает полное имя файла.
- НачатьПолучениеВремениИзменения
- НачатьПолучениеКартинкиПредставленияФайлаБиблиотекиМобильногоУстройства
- НачатьПолучениеНевидимости
- НачатьПолучениеРазмера
- НачатьПолучениеТолькоЧтения
- НачатьПолучениеУниверсальногоВремениИзменения
- НачатьПроверкуСуществования
- НачатьПроверкуЭтоКаталог
- НачатьПроверкуЭтоФайл
- НачатьУстановкуВремениИзменения
- НачатьУстановкуНевидимости
- НачатьУстановкуТолькоЧтения
- НачатьУстановкуУниверсальногоВремениИзменения
- ПолучитьВремяИзменения
- ПолучитьКартинкуПредставленияФайлаБиблиотекиМобильногоУстройства
- ПолучитьНевидимость
- ПолучитьПредставлениеФайлаБиблиотекиМобильногоУстройства
- ПолучитьТолькоЧтение
- ПолучитьУниверсальноеВремяИзменения
- Размер
- Существует
- УстановитьВремяИзменения
- УстановитьНевидимость
- УстановитьТолькоЧтение
- УстановитьУниверсальноеВремяИзменения
- ЭтоКаталог
- ЭтоФайл
Некоторые методы по своей сути делают одно и то же действие, например, НачатьУстановкуТолькоЧтения и УстановитьТолькоЧтение. Методы, которые начинаются с «Начать*», предназначены для работы в асинхронном режиме, они доступны только на клиентах, а вот их «братья» доступны и на сервере. При работе на клиенте с файлами рекомендуется использовать асинхронные методы, однако методы без префикса «Начать» также доступны на клиенте. При использовании таких методов в веб-клиенте нужно будет подключать расширение по работе с файлами (как это сделать, будет рассмотрено ниже в статье).
Пример кода работы с объектом Файл:
Данный код устанавливает признак только чтения у всех файлов “*.doc” на диске C:.
Пример этого же алгоритма, но с использованием асинхронных методов:
Писать асинхронный код очень неудобно, он получается громоздкий, но именно асинхронный подход надо применять, а особенно – при разработке для web клиента.
Работа с файлами в клиент-серверной архитектуре
При работе в клиент-серверной архитектуре мы не можем работать с файлом на сервере, который был выбран на клиенте, т.к. сервер и клиент – это физически две разных машины. Чтобы решить эту проблему, мы должны передать файл из клиента на сервер, используя временное хранилище.
Пример синхронного кода:
Для передачи файлов существуют также такие асинхронные методы, как:
Вместо функции ПолучитьИзВременногоХранилища также можно использовать функцию ПолучитьФайл.
Работа с файлами в web-клиенте
Для работы с файлами в веб-клиенте необходимо расширение работы с файлами, делается это функциями:
В БСП (подсистема ПодключаемоеОборудование) уже есть метод, который использует указанные выше функции.
Если у вас используется web клиент, рекомендуется использовать следующую конструкцию:
Читайте также: