Работа с файловой системой в языке 1С 8.3, 8.2 (в примерах)
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
2017-12-18T22:31:41+00:00Дата Если Массивы Математика Процедуры Строки Циклы
Диалоги ОписаниеТипов ОперационнаяСистема Приложение Соответствие
СписокЗначений Структура ТаблицаЗначений ФайловаяСистема Формат
ОбщиеОбъекты Запросы ПрикладныеОбъекты УниверсальныеФункции
Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)
&НаСервере Процедура ЧтениеИЗаписьФайловНаСервере() /// Как записать произвольное значение в файл в 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", // куда сохранять на клиента АдресФайлаВХранилище // адрес в хранилище на сервере ) ); НачатьПолучениеФайлов( ОповещениеОЗавершении, ПолучаемыеФайлы, , Ложь // интерактивно ); КонецПроцедуры &НаКлиенте Процедура ВыполнитьПослеПолученияФайлов(ПолученныеФайлы, ДополнительныеПараметры) Экспорт Для Каждого Файл Из ПолученныеФайлы Цикл Сообщить("Получен " + Файл.Имя + " из " + Файл.Хранение); КонецЦикла; КонецПроцедуры /// Скачать и выполнить эти примеры на компьютере |
Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)
Работа с файловой системой в языке 1С 8.3, 8.2 (в примерах)
Дата Если Массивы Математика Процедуры Строки Циклы
Диалоги ОписаниеТипов ОперационнаяСистема Приложение Соответствие
СписокЗначений Структура ТаблицаЗначений ФайловаяСистема Формат
ОбщиеОбъекты Запросы ПрикладныеОбъекты УниверсальныеФункции

Нажмите одну из кнопок, чтобы поделиться: