Начинает получение значение атрибута файла "Только чтение" ("Read only").
Синтаксис
НачатьПолучениеТолькоЧтения(<ОписаниеОповещения>)Полное описание, параметры и ограничения
Файл.НачатьПолучениеТолькоЧтения (File.BeginGettingReadOnly)
Файл (File)
НачатьПолучениеТолькоЧтения (BeginGettingReadOnly)
Доступен, начиная с версии 8.3.6.
Синтаксис:
НачатьПолучениеТолькоЧтения(<ОписаниеОповещения>)
Параметры:
<ОписаниеОповещения> (обязательный)
Тип: ОписаниеОповещения.
Содержит описание процедуры, которая будет вызвана после завершения со следующими параметрами:
<ТолькоЧтение> - Тип: Булево. Истина - у файла установлен атрибут "Только чтение"; Ложь - в противном случае.
<ДополнительныеПараметры> - значение, которое было указано при создании объекта ОписаниеОповещения.
Описание:
Начинает получение значение атрибута файла "Только чтение" ("Read only").
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, толстый клиент, мобильное приложение (клиент).
См. также:
Файл, метод ПолучитьТолькоЧтение
Файл, метод ПолучитьТолькоЧтениеАсинх
Использование в версии:
Доступен, начиная с версии 8.3.6.
Описание изменено в версии 8.3.18.
Методическая информация
Практические примеры
Переключить Hidden/readonly через последовательные оповещения
Четыре установочных/получающих метода применяем к своему закрытому файлу. Возвращённые булевы значения читаются в обработчиках, установка передаёт только состояние.
Где и как запускать
Полный клиентский модуль учебной формы Windows; собственный новый файл.
Подготовка
Создайте учебную внешнюю обработку с пустой управляемой основной формой. Создайте команду УчебныйПример и кнопку этой команды.
В свойстве команды Действие выберите процедуру УчебныйПример. Вставьте полный приведённый модуль формы.
Откройте EPF в тонком или толстом клиенте Windows и нажмите кнопку. Не переносите Ждать и Асинх в серверный общий модуль.
Файл создаётся на компьютере клиента Windows во временном каталоге. Веб-клиент и сервер для данного модуля не используйте.
Требуется разрешённый в учебной базе доступ к локальной файловой системе. Не отключайте профиль безопасности рабочей базы ради запуска.
Создаётся только собственный временный файл с режимом СоздатьНовый. После ожидания операций ресурсы закрываются, точное собственное имя удаляется.
Вставьте весь модуль одной задачи в новую учебную форму. Здесь обычные процедуры и ОписаниеОповещения, не Асинх/Ждать.
Учебный файл ABC123 создаётся с СоздатьНовый; поток записи закрывается до запуска операций карточки.
В обработчиках успеха сначала идут результаты метода, затем Состояние; установочные методы передают только Состояние.
При очистке снимаются Hidden/readonly только у собственного точного имени. Ошибки закрытия/удаления показываются, не скрываются.
Перем Выполняется;
&НаКлиенте
Процедура УчебныйПример(Команда)
Если Выполняется = Истина Тогда
Сообщить("Дождитесь окончания предыдущего примера");
Возврат;
КонецЕсли;
Состояние = Новый Структура("Поток,Копия,Буфер,Прочитанный,ИмяФайла,СвойФайл",
Неопределено, Неопределено, Неопределено, Неопределено, "", Ложь);
Попытка
Состояние.ИмяФайла = ПолучитьИмяВременногоФайла("bin");
Файл = Новый Файл(Состояние.ИмяФайла);
Если Файл.Существует() Тогда
ВызватьИсключение "Имя уже занято: существующий файл не открываем";
КонецЕсли;
Состояние.Поток = Новый ФайловыйПоток(Состояние.ИмяФайла,
РежимОткрытияФайла.СоздатьНовый, ДоступКФайлу.ЧтениеИЗапись);
Состояние.СвойФайл = Истина;
Состояние.Буфер = ПолучитьБуферДвоичныхДанныхИзСтроки("ABC123", КодировкаТекста.UTF8, Ложь);
Состояние.Прочитанный = Новый БуферДвоичныхДанных(6);
Состояние.Поток.Записать(Состояние.Буфер, 0, 6);
Состояние.Поток.Закрыть();
Состояние.Поток = Неопределено;
Состояние.Вставить("Карточка", Новый Файл(Состояние.ИмяФайла));
Исключение
ОсвободитьРесурсы(Состояние);
ВызватьИсключение;
КонецПопытки;
Выполняется = Истина;
Попытка
Состояние.Карточка.НачатьУстановкуНевидимости(ОповещениеДля("ПослеСкрытия", Состояние), Истина);
Исключение
ОсвободитьРесурсы(Состояние);
Выполняется = Ложь;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Функция ОповещениеДля(Имя, Состояние)
Возврат Новый ОписаниеОповещения(Имя, ЭтотОбъект, Состояние,
"ОшибкаОперации", ЭтотОбъект);
КонецФункции
&НаКлиенте
Процедура ОсвободитьРесурсы(Состояние)
Если Состояние.Копия <> Неопределено Тогда
Попытка
Состояние.Копия.Закрыть();
Состояние.Копия = Неопределено;
Исключение
Сообщить("Не удалось закрыть собственную копию: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Если Состояние.Поток <> Неопределено Тогда
Попытка
Состояние.Поток.Закрыть();
Состояние.Поток = Неопределено;
Исключение
Сообщить("Не удалось закрыть собственный источник: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Если Состояние.СвойФайл Тогда
Если Состояние.Поток = Неопределено Тогда
Попытка
ФайлДляОчистки = Новый Файл(Состояние.ИмяФайла);
Если ФайлДляОчистки.Существует() Тогда
ФайлДляОчистки.УстановитьТолькоЧтение(Ложь);
ФайлДляОчистки.УстановитьНевидимость(Ложь);
КонецЕсли;
Файл = Новый Файл(Состояние.ИмяФайла);
Если Файл.Существует() Тогда
УдалитьФайлы(Состояние.ИмяФайла);
КонецЕсли;
Сообщить(Не Файл.Существует());
Состояние.СвойФайл = Ложь;
Исключение
Сообщить("Свой временный файл остался: " + Состояние.ИмяФайла);
Сообщить(ОписаниеОшибки());
КонецПопытки;
Иначе
Сообщить("Источник не закрыт; собственный файл не удаляем: " + Состояние.ИмяФайла);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОшибкаОперации(Ошибка, СтандартнаяОбработка, Состояние) Экспорт
ОсвободитьРесурсы(Состояние);
Выполняется = Ложь;
СтандартнаяОбработка = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПослеСкрытия(Состояние) Экспорт
Попытка
Состояние.Карточка.НачатьПолучениеНевидимости(ОповещениеДля("Скрытость", Состояние));
Исключение
ОсвободитьРесурсы(Состояние);
Выполняется = Ложь;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура Скрытость(Скрыт, Состояние) Экспорт
Попытка
Сообщить(Скрыт);
Состояние.Карточка.НачатьУстановкуНевидимости(ОповещениеДля("ПослеВосстановленияВидимости", Состояние), Ложь);
Исключение
ОсвободитьРесурсы(Состояние);
Выполняется = Ложь;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ПослеВосстановленияВидимости(Состояние) Экспорт
Попытка
Состояние.Карточка.НачатьПолучениеНевидимости(ОповещениеДля("ВидимостьВосстановлена", Состояние));
Исключение
ОсвободитьРесурсы(Состояние);
Выполняется = Ложь;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ВидимостьВосстановлена(Скрыт, Состояние) Экспорт
Попытка
Сообщить(Не Скрыт);
Состояние.Карточка.НачатьУстановкуТолькоЧтения(ОповещениеДля("ПослеReadonly", Состояние), Истина);
Исключение
ОсвободитьРесурсы(Состояние);
Выполняется = Ложь;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ПослеReadonly(Состояние) Экспорт
Попытка
Состояние.Карточка.НачатьПолучениеТолькоЧтения(ОповещениеДля("Readonly", Состояние));
Исключение
ОсвободитьРесурсы(Состояние);
Выполняется = Ложь;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура Readonly(ТолькоЧтение, Состояние) Экспорт
Попытка
Сообщить(ТолькоЧтение);
Состояние.Карточка.НачатьУстановкуТолькоЧтения(ОповещениеДля("ПослеСнятияReadonly", Состояние), Ложь);
Исключение
ОсвободитьРесурсы(Состояние);
Выполняется = Ложь;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ПослеСнятияReadonly(Состояние) Экспорт
Попытка
Состояние.Карточка.НачатьПолучениеТолькоЧтения(ОповещениеДля("ReadonlyСнят", Состояние));
Исключение
ОсвободитьРесурсы(Состояние);
Выполняется = Ложь;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ReadonlyСнят(ТолькоЧтение, Состояние) Экспорт
Попытка
Сообщить(Не ТолькоЧтение);
Сообщить(Состояние.Карточка.Размер() = 6);
ЗавершитьПример(Состояние);
Исключение
ОсвободитьРесурсы(Состояние);
Выполняется = Ложь;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ЗавершитьПример(Состояние) Экспорт
Попытка
ОсвободитьРесурсы(Состояние);
Выполняется = Ложь;
Сообщить("Проверка файловой карточки завершена");
Исключение
ОсвободитьРесурсы(Состояние);
Выполняется = Ложь;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Разбор по шагам
После установочного НачатьУстановкуНевидимости вызывается ПослеСкрытия только с Состояние.
Полученный Hidden=True читается в Скрытость; после установки False отдельно проверяется восстановление.
Readonly также включается и затем снимается с двумя обратными чтениями.
Записывающий поток закрыт до переключения атрибутов. Очистка снимает оба атрибута, даже если цепочка не дошла до нормального конца.
Как проверить результат
Пять сравнений Истина: Hidden=True/False, readonly=True/False, размер 6.
При успешной очистке файл отсутствует. Атрибуты чужих файлов и права пользователя базы не менялись.
Ожидаемый результат
Отработана полная цепочка установки и проверки двух файловых атрибутов.
На что обратить внимание
Readonly-атрибут не заменяет ACL, Hidden не скрывает секреты от чтения по пути.
Не добавляйте фиктивный параметр Результат установочным обработчикам: это сдвинет Состояние.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.