Для работы с файлами и каталогами в 1С:Предприятие используется специальный объект "ФС" (файловая система). Средства языка 1С имеют возможности поиска, копирования, переименования, удаления и совершения других операций с файлами и каталогами.
Обращение к файловой системе
Для работы с файловой системой предназначен объект "ФС". В принципе его не требуется создавать с помощью функции СоздатьОбъект. Можно считать, что он уже создан. Но 1С позволяет создать сколько угодно таких объектов при помощи функции СоздатьОбъект; Это может оказаться полезным при создании рекурсивных функций для работы с фаловой системой. Пример такой функции будет рассмотрен далее.
Пример:
ГдеМыНаходимся = ФС.ТекКаталог(); ФС.СоздатьКаталог("DOCS"); НовФС = СоздатьОбъект("ФС");
Объект "ФС" имеет следующие методы:
Метод |
Описание |
ВыбратьФайл(<ИмяФайла>) |
Открывает окно диалога выбора/сохранения файла. Возвращает: 0 - если в окне диалога нажата кнопка 'Отмена', 1 - если нажата кнопка 'ОК'.
Синтаксис: ВыбратьФайл (<ТипДиалога>, <ИмяФайла>, <ИмяНачКаталога>, <ЗаголовокОкна>, <Фильтр>, <Расширение>, <Таймаут>)
Параметры: <ТипДиалога> -: 0 - диалог типа <открыть>, 1 - диалог типа <сохранить>; <ИмяФайла> - переменная, содержащая на входе строку с именем файла, а на выходе - имя выбранного файла; <ИмяНачКаталога> - переменная, содержащая на входе строку с начальным каталогом, а на выходе - имя выбранного каталога; <ЗаголовокОкна> - строка с заголовком окна; <Фильтр> - строка с фильтром отбора файлов (например: 'Все файлы (*.*) |*.*'); <Расширение> - строка с расширением файла по умолчанию; <Таймаут> - время ожидания отклика пользователя в секундах (необязателен).
|
ВыбратьФайлКартинки |
Открывает окно диалога выбора/сохранения файла картинки. Возвращает: 0 - если в окне диалога нажата кнопка 'Отмена', 1 - если нажата кнопка 'ОК'. Синтаксис: ВыбратьФайлКартинки (<ТипДиалога>, <ИмяФайла>, <ИмяНачКаталога>, <ЗаголовокОкна>, <Расширение>, <Таймаут>) |
ВыбратьКаталог |
Открывает окно диалога выбора каталога. Возвращает: 0 - если в окне диалога нажата кнопка 'Отмена'; 1 - если в окне диалога нажата кнопка 'ОК', при этом в переменную <ИмяНачКаталога> возвращается имя выбранного каталога; -1 (минус единица) - закончилось время <Таймаут> ожидания отклика пользователя. Синтаксис: ВыбратьКаталог(<ИмяКаталога>,<ЗаголовокОкна>,<Таймаут>) |
СуществуетФайл |
Проверяет существование файла.. Возвращает: 1 - файл существует; 0 - не существует. Синтаксис: СуществуетФайл(<ИмяФайла>) |
КопироватьФайл |
Копирует файл. Синтаксис: КопироватьФайл(<ИмяФайлаИсточника>,<ИмяФайлаПриемника>,<ФлагПерезаписи>) Параметры: <ИмяФайлаИсточника> - строка с именем файла источника; <ИмяФайлаПриемника> - строка с именем файла приемника; <ФлагПерезаписи> -: 0 - существующий файл приемника перезаписать; 1 - существующий файл приемника не перезаписывать. |
УдалитьФайл |
Удаляет файл. Синтаксис: УдалитьФайл(<ИмяФайла>) |
ПереименоватьФайл |
Переименовать/переместить файл. Синтаксис: ПереименоватьФайл(<ИмяФайлаИсточника>, <ИмяФайлаПриемника>, <ФлагПерезаписи>)
Параметры: <ИмяФайлаИсточника> - строка с именем файла источника; <ИмяФайлаПриемника> - строка с новым именем файла; <ФлагПерезаписи> -: 0 - запрещает перемещение файла между дисками и существующий файл приемника не перезаписывается; 1 - разрешает перемещение файла между дисками (только для файлов) и существующий файл приемника перезаписывается.
|
НайтиПервыйФайл |
Открывает выборку файлов по заданной маске и находит первый файл. Возвращает строку с именем найденного файла. Синтаксис: НайтиПервыйФайл(<МаскаИмени>) |
НайтиСледующийФайл |
Находит следующий файл по открытой выборке файлов. Возвращает строку с именем найденного файла. Синтаксис: НайтиСледующийФайл() |
АтрибутыФайла |
Возвращает атрибуты файла (в параметрах). Синтаксис: АтрибутыФайла (<ИмяФайла>, <РазмерФайла>, <АтрибутыФайла>, <ВремяСоздания>, <ВремяПоследнегоДоступа>, <ВремяПоследнейЗаписи>, <РасширенноеИмяФайла>)
Атрибуты файла закодированы, об этом см. Синтакс-Помощник или описание встроенного языка
|
СоздатьКаталог |
Создать новый каталог (папку). Синтаксис:СоздатьКаталог(<ИмяКаталога>) |
УдалитьКаталог |
Удаляет каталог файлов. Синтаксис: УдалитьКаталог(<ИмяФайла>) |
УстТекКаталог |
Устанавливает текущий каталог файлов. Синтаксис: УстТекКаталог(<ИмяФайла>) |
ТекКаталог |
Возвращает строку с именем текущего каталога файлов. |
WindowsКаталог |
Возвращает строку с именем Windows директории. |
СвободноеМестоНаДиске |
Возвращает размер свободного дискового пространства в байтах. Синтаксис: СвободноеМестоНаДиске(<ИмяДиска>) |
Также часто применяются системные функции:
Метод |
Описание |
КаталогИБ |
Возвращает имя каталога базы данных. |
КаталогПользователя |
Возвращает имя каталога пользователя. |
КаталогПрограммы |
Возвращает имя каталога с исполняемыми файлами системы 1С:Предприятие. |
КаталогВременныхФайлов |
Возвращает имя каталога временных файлов. |
ИмяКомпьютера |
Возвращает сетевое имя компьютера, работающего в данный момент с программой. |
Примеры
Пример 1
//переместить все текстовые файлы (*.txt) из каталога информационной базы в каталог TXT.
ФС.УстТекКаталог(КаталогИБ()); ИмяФайла = ""; ИмяФайла = ФС.НайтиПервыйФайл("*.txt"); Если ИмяФайла <> "" Тогда ФС.СоздатьКаталог("TXT"); ФС.КопироватьФайл(ИмяФайла,ФС.ТекКаталог() + "TXT" + ИмяФайла); ФС.УдалитьФайл(ИмяФайла);
Пока 1=1 Цикл ИмяФайла = " "; ИмяФайла = ФС.НайтиСледующийФайл() Если ИмяФайла <> "" Тогда ФС.КопироватьФайл(ИмяФайла,ФС.ТекКаталог() + "TXT" + ИмяФайла); ФС.УдалитьФайл(ИмяФайла); Иначе Прервать; КонецЕсли; КонецЦикла;
КонецЕсли;
Пример 2
//выбрать файл с фотографией сотрудника ИмяФайла = ""; ИмяКаталога = КаталогИБ(); Если ФС.ВыбратьФайлКартинки(0,ИмяФайла,ИмяКаталога,"Укажите файл с фотографией:",,20)=1 Тогда ВремКартинка = СоздатьОбъект("Картинка"); ВремКартинка.Загрузить(ИмяКаталога + ИмяФайла); КартинкаНаФорме.УстановитьКартинку(ВремКартинка); КонецЕсли;
Пример 3
При переборе файлов методами НайтиПервыйФайл() и НайтиСледующийФайл() файловая система перебирает как файлы, так и каталоги.
Для определения что выбрано - файл или каталог, служит приведенная ниже функция
Функция ЭтоКаталог(ИмяФайла) Перем Размер, Атрибуты, Создан, Доступ, Запись, РасшИмяФайла; Рез = 0; ФС.АтрибутыФайла(ИмяФайла, Размер, Атрибуты, Создан, Доступ, Запись, РасшИмяФайла); Если Сред(Атрибуты,4,1) = "1" Тогда Рез = 1; КонецЕсли; Возврат Рез; КонецФункции
Пример 4
Этот пример показывает работу с файловой системой через рекурсивную процедуру, создающую объект "ФС".
В этой процедуре используется функция ЭтоКаталог() из предыдущего примера.
Эта процедура позволяет копировать все файлы или файлы с заданным расширением из одного каталога в другой, включая все вложенные подкаталоги.
КопироватьФайлы(КаталогЗаявок,КаталогDATAOUT,"csv");
Процедура КопироватьФайлы(ПутьОткуда,ПутьКуда,Расширение) ФС_ = СоздатьОбъект("ФС"); ИмяФайла = ФС_.НайтиПервыйФайл(ПутьОткуда+"\*.*"); Пока ПустаяСтрока(ИмяФайла) = 0 Цикл Если (ИмяФайла <> ".") И (ИмяФайла <> "..") Тогда Если ЭтоКаталог(ПутьОткуда+"\"+ИмяФайла) = 1 Тогда ПодКаталогОткуда = ПутьОткуда + "\"+ИмяФайла; ПодКаталогКуда = ПутьКуда + "\"+ИмяФайла; // Проверим наличие подкаталога в папке ПутьКуда
// - если его нет, создадим Если (ФС_.СуществуетФайл(ПодКаталогКуда) = 0) ИЛИ
(ЭтоКаталог(ПодКаталогКуда) = 0) Тогда ФС_.СоздатьКаталог(ПодКаталогКуда); КонецЕсли; КопироватьФайлы(ПодКаталогОткуда,ПодКаталогКуда,Расширение); Иначе Поз = Найти(ИмяФайла,"."); Расш = Нрег(?(Поз>0,Сред(ИмяФайла,Поз+1),"")); Если Расш <> Нрег(Расширение) Тогда ИмяФайла = ФС_.НайтиСледующийФайл(); Продолжить; КонецЕсли; ИмяФайлаИсточника = ПутьОткуда + "\" + ИмяФайла; ИмяФайлаПриемника = ПутьКуда + "\" + ИмяФайла; ФС_.КопироватьФайл(ИмяФайлаИсточника,ИмяФайлаПриемника,0); // Копируем с перзаписью КонецЕсли; КонецЕсли; ИмяФайла = ФС_.НайтиСледующийФайл(); КонецЦикла; КонецПроцедуры
|