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