Устанавливает размер потока. Если текущий размер превышает заданный, поток будет сокращен до заданного размера, а информация, превышающая заданный размер, будет потеряна. Если текущий размер потока меньше заданного, то содержимое потока между старым и новым размером не определено.
Синтаксис
УстановитьРазмер(<Размер>)Полное описание, параметры и ограничения
Поток.УстановитьРазмер (Stream.SetSize)
Поток (Stream)
УстановитьРазмер (SetSize)
Доступен, начиная с версии 8.3.9.
Синтаксис:
УстановитьРазмер(<Размер>)
Параметры:
<Размер> (обязательный)
Тип: Число.
Устанавливаемый размер потока.
Описание:
Устанавливает размер потока.
Если текущий размер превышает заданный, поток будет сокращен до заданного размера, а информация, превышающая заданный размер, будет потеряна.
Если текущий размер потока меньше заданного, то содержимое потока между старым и новым размером не определено.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер, интеграция.
Примечание:
Установить длину потока можно только в том случае, если в потоке разрешены запись и изменение позиции. В противном случае будет сгенерировано исключение.
См. также:
Поток, метод НачатьУстановкуРазмера
Поток, метод Размер
Поток, метод УстановитьРазмерАсинх
Использование в версии:
Доступен, начиная с версии 8.3.9.
Описание изменено в версии 8.3.18.
Методическая информация
Практические примеры
Проверить запрет записи и изменения размера readonly-потока
Пробуем только два намеренно запрещённых действия со своим файлом. Исключения учитываем, затем проверяем неизменность данных.
Где и как запускать
Серверная процедура отдельной учебной базы; локальный временный файл сервера.
Подготовка
Каждый фрагмент запускайте отдельно в серверной процедуре своей учебной базы. Файл создаётся во временном каталоге сервера, не на компьютере клиента.
Пример получает новое временное имя и использует СоздатьНовый, не Создать. Чужой существующий файл никогда не открывается для перезаписи.
После завершения/ошибки закрываются только созданные потоки и удаляется только точное собственное имя. Это не резервная копия и не операция над вашими XML.
ИмяФайла = ПолучитьИмяВременногоФайла("bin");
УчебныйФайл = Новый Файл(ИмяФайла);
Если УчебныйФайл.Существует() Тогда
ВызватьИсключение "Временное имя уже занято: чужой файл не открываем";
КонецЕсли;
Поток = Неопределено;
Вид = Неопределено;
Копия = Неопределено;
СозданСвойФайл = Ложь;
Попытка
Поток = Новый ФайловыйПоток(ИмяФайла, РежимОткрытияФайла.СоздатьНовый, ДоступКФайлу.ЧтениеИЗапись);
СозданСвойФайл = Истина;
Буфер = ПолучитьБуферДвоичныхДанныхИзСтроки("ABC123", КодировкаТекста.UTF8, Ложь);
Поток.Записать(Буфер, 0, Буфер.Размер);
Вид = Поток.ПолучитьПотокТолькоДляЧтения();
Отказов = 0;
Попытка
Вид.Записать(Буфер, 0, 1);
Исключение
Отказов = Отказов + 1;
Сообщить("Ожидаемый запрет записи: " + ОписаниеОшибки());
КонецПопытки;
Попытка
Вид.УстановитьРазмер(2);
Исключение
Отказов = Отказов + 1;
Сообщить("Ожидаемый запрет размера: " + ОписаниеОшибки());
КонецПопытки;
Сообщить(Отказов = 2);
Сообщить(Вид.Размер() = 6);
Вид.Перейти(0, ПозицияВПотоке.Начало);
Проверка = Новый БуферДвоичныхДанных(6);
Сообщить(Вид.Прочитать(Проверка, 0, 6) = 6);
Сообщить(ПолучитьСтрокуИзБуфераДвоичныхДанных(Проверка, КодировкаТекста.UTF8) = "ABC123");
Исключение
Если Вид <> Неопределено Тогда
Вид.Закрыть();
КонецЕсли;
Если Копия <> Неопределено Тогда
Копия.Закрыть();
КонецЕсли;
Если Поток <> Неопределено Тогда
Поток.Закрыть();
КонецЕсли;
Если СозданСвойФайл И УчебныйФайл.Существует() Тогда
УдалитьФайлы(ИмяФайла);
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
Если Вид <> Неопределено Тогда
Вид.Закрыть();
КонецЕсли;
Если Копия <> Неопределено Тогда
Копия.Закрыть();
КонецЕсли;
Если Поток <> Неопределено Тогда
Поток.Закрыть();
КонецЕсли;
Если СозданСвойФайл Тогда
УдалитьФайлы(ИмяФайла);
КонецЕсли;
Сообщить(Не УчебныйФайл.Существует());Разбор по шагам
Получаем readonly-вид только уже созданного собственным уроком файла.
Записать и УстановитьРазмер оборачиваем по отдельности, чтобы проверить оба отказа.
Счётчик сравниваем после блоков перехвата; затем читаем фактический размер и весь исходный текст.
Как проверить результат
Два сообщения об ожидаемых запретах; четыре финальных сравнения Истина.
Размер 6 и содержимое ABC123 не изменились. Пойманная ошибка не называется успешной записью.
Последнее сообщение Истина: точный собственный временный файл удалён после закрытия ресурсов.
Ожидаемый результат
На настоящем readonly-виде проверены два запрета изменения.
На что обратить внимание
В рабочем коде сначала проверяйте ДоступнаЗапись, а не используйте исключение для обычного управления потоком.
Readonly-вид не превращает изменяемые исходные данные в резервную копию.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.