Работа с файловой системой в языке 1С 8.3 (в примерах)
&НаСервере Процедура ЧтениеИЗаписьФайловНаСервере() /// Как записать произвольное значение в файл в 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:\Temp\v8_11AE_4.tmp Сообщить( ПолучитьИмяВременногоФайла(".txt") ); // например, c:\Temp\v8_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_dir\2\3"); /// Как проверить существование каталога в 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", // куда сохранять на клиента АдресФайлаВХранилище // адрес в хранилище на сервере ) ); НачатьПолучениеФайлов( ОповещениеОЗавершении, ПолучаемыеФайлы, , Ложь // интерактивно ); КонецПроцедуры &НаКлиенте Процедура ВыполнитьПослеПолученияФайлов(ПолученныеФайлы, ДополнительныеПараметры) Экспорт Для Каждого Файл Из ПолученныеФайлы Цикл Сообщить("Получен " + Файл.Имя + " из " + Файл.Хранение); КонецЦикла; КонецПроцедуры |